SpringCloud第一篇:服务的注册与发现Eureka

news2024/11/30 14:39:44

一、spring cloud简介

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。

二、创建服务注册中心

在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。

服务调用关系:

  • 服务提供者:暴露接口给其它微服务调用
  • 服务消费者:调用其它微服务提供的接口
  • 提供者与消费者角色其实是相对的
  • 一个服务可以同时是服务提供者和服务消费者

三、eureka的作用

通过下面这三个问题就可以了解

1.消费者如何获取服务提供者的具体信息?

  • 服务提供者启动时向eureka注册自己的信息
  • eureka保存这些信息
  • 消费者根据服务名称向eureka拉去提供者信息

2.如果有多个服务提供者,消费者该如何选择?

  • 服务消费者利用负载均衡算法,从服务列表选一个

3.消费者如何感知服务提供者的健康状态

  • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  • eureka会更新服务列表信息,心跳不正常会被踢出
  • 消费者拉取最新信息

因此,我们总结出在Eureka架构中,微服务角色有两类:

EurekaServer:服务端,注册中心

  • 记录服务信息
  • 心跳监控

EurekaClient:客户端

  • Provider:服务提供者,例如案例中的user-service

                注册自己的信息到EurekaServer
                每隔30秒向EurekaServer发送心跳

  • consumer:服务消费者,例如案例中的order-service

                根据服务名称从EurekaServer拉取服务列表
                基于服务列表做负载均衡,选中一个微服务后发起远程调用

四、如何搭建:

(一)搭建eureka服务

1.创建moudle,并在pom文件中引入依赖

<!--eureka server -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>

2.在启动类上添加@EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaserverApplication.class, args);
	}
}

3.编写配置文件

server:
  port: 10086 #服务端口
spring:
  application:
    name: eurekaserver  #eureka的服务名称
eureka:
  instance:
    hostname: localhost
  client:
    service-url:   #eureka的服务名称
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      

(二)将user-service服务注册到eurekaserver

一、在user-service中引入依赖

<!--eureka server -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

二、编写配置文件

spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

(三)在order-service客户端完成服务拉取

一、引入依赖

<!--eureka server -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>

二、在yml文件中配置eureka地址

spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

三、在启动类上添加负载均衡注解@LoadBalanced

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTempate();
}

总结一下:

1.搭建EurekaServer

  • 引入eureka-server依赖
  • 添加@EnableEurekaServer注解
  • 在application.yml中配置eureka地址

2.服务注册

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址

3.服务发现

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址
  • 给RestTemplate添加@LoadBalanced注解
  • 用服务提供者的服务名称远程调用

五、负载均衡策略

负载均衡流程如下图

 调整负载均衡有两种策略

策略一:在oder-service中启动类中,定义一个新的IRule

@Bean
public IRule randomRule(){
    return new RandomRule();
}

策略二:在配置文件中添加新的配置

userservice:
  ribbon:
    NFLoadBalangerRuleClassName: com.netflix.loadbalancer .RandomRule # 负载均衡规则

第一种作用范围是全体,第二种作用于某一个微服务

1. Ribbon负载均衡规则
        规则接口是IRule
        默认实现是zoneAvoidanceRule,根据zone选择服务列表,然后轮询
2.负载均衡自定义方式
        代码方式:配置灵活,但修改时需要重新打包发布
        配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
3.饥饿加载
        开启饥饿加载
        指定饥饿加载的微服务名称

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle细节、经验锦集

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131054454 出自【进步*于辰的博客】> 由于是随兴记录&#xff0c;因此阐述的比较多而乱&…

详解Eureka服务注册和调用

目录 1.概述 2.环境 2.1.项目结构 2.2.项目架构 2.3.依赖 3.注册中心 3.1.配置使用 3.2.管理页 3.3.集群 4.服务注册 5.服务调用 5.2.Ribbon 5.3.Feign 5.4.OpenFeign 1.概述 我们把从外部进入到微服务集群里的流量称为“南北流量”、微服务集群节点间流转的流量…

HTML type=“radio“ 不显示按钮

问题 HTML中type&#xff1d;"radio" 但是在界面中不显示按钮。 详细问题 HTML中type&#xff1d;"radio" 但是在界面中不显示按钮。 笔者html核心代码 <div>性别<input type"radio" id"male" name"gender" va…

chatgpt赋能python:Python中的中文分词神器——jieba

Python中的中文分词神器——jieba 介绍 如果你曾经在处理中文文本时&#xff0c;也许会遇到中文分词的需求&#xff0c;jieba就是一款不可错过的工具。 jieba 是目前最好的 Python 中文分词库&#xff0c;它具有高效、简单和可定制等优点&#xff0c;适合各种规模的文本分词…

Linux学习之vim四种模式初探

vim是一个多模式&#xff0c;有vim /所在目录/文件名&#xff0c;若是已经有了文件&#xff0c;可以打开文件进行编辑&#xff0c;若是没有文件&#xff0c;在vim中保存之后就会有一个文件&#xff0c;相当于记事本里边新建一个文件。我现在就使用vim新建一个文件&#xff0c;然…

C# .NET EF框架 webapi 安装使用sqlite

文章目录 Sqlite安装使用Sqlite特点环境安装EF 是什么&#xff1f;EF使用举例 Nuget控制台 Sqlite安装使用 Sqlite特点 Sqlite是轻量级数据库&#xff0c;不需要安装&#xff0c;跨平台使用。是用来做小软件&#xff0c;小项目&#xff0c;快速移植的最优解。不需要像mysql和…

Verilog基础:表达式中的整数常量(integer)

相关文章 Verilog基础&#xff1a;表达式位宽的确定&#xff08;位宽拓展&#xff09; Verilog基础&#xff1a;表达式符号的确定 Verilog基础&#xff1a;数据类型 Verilog基础&#xff1a;位宽拓展和有符号数运算的联系 Verilog基础&#xff1a;case、casex、ca…

chatgpt赋能python:Python如何Input一个字典:详细教程

Python 如何 Input 一个字典&#xff1a;详细教程 在 Python 中&#xff0c;字典是一种非常有用的数据结构。它可以存储键值对&#xff0c;让我们能够通过键访问值。Python 中没有固定的语法来创建字典&#xff0c;因此本文将教你如何输入一个字典。 什么是字典&#xff1f; …

chatgpt赋能python:Python语言中的Pandas库介绍

Python语言中的Pandas库介绍 Python语言是一种十分流行的编程语言&#xff0c;以其易读易写等特点而受到工程师和数据科学家的青睐。在Python语言中&#xff0c;有一款非常流行的数据处理和分析库&#xff0c;也就是Pandas库。Pandas库在数据处理和分析方面有着出色的表现&…

iOS开发最佳实践|集成声网SDK实现语音聊天室

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c; 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想当开发的测试&#xff0c;不是一个好…

初探Sharding-JDBC订单表分片实现

设计订单系统有两个数据库db_order_01和db_order_02。每个数据库分别有t_order_0和t_order_1两张订单表。 订单表设计有订单ID(order_id)&#xff0c;用户ID(user_id)&#xff0c;商户ID(merchant_id)。假设商户查看订单操作要比用户查看订单的操作更加频繁。避免商户查询订单时…

NLP学习笔记五-simple RNN

NLP学习笔记五-simple RNN 我这个学习笔记&#xff0c;感兴趣的小伙伴&#xff0c;看的时候尽量从头开始看&#xff0c;这样更好理解&#xff0c;也更有收获。 simple RNN的单元结构图如下&#xff1a; 其中A就是我们需要学习的参数矩阵&#xff0c; h t − 1 h_{t-1} ht−1​…

【MySQL数据库 | 第十五篇】事务

目录 前言&#xff1a; 介绍事务&#xff1a; 控制事务&#xff1a; 事务四大特性&#xff1a; 并发事务问题&#xff1a; 事务隔离级别&#xff1a; 总结: 前言&#xff1a; 这章我们将进入到MySQL基础篇的最后一章&#xff1a;事务&#xff0c;希望大家可以坚持下去&#xf…

车间如何做好“生产计划”,打造高效运营的智能工厂

新形势下&#xff0c;面对外部不断变化的市场需求、供应链下游企业管理升级需求以及持续上涨的人力成本&#xff0c;传统工厂模式必须要变革才能更好地发展。热潮之下&#xff0c;企业纷纷规划建设智能工厂。那么&#xff0c;新工厂规划如何避免投入浪费&#xff0c;少走弯路&a…

Linux——进程间通信,信号量的使用+小demo(C语言)

一.什么是信号量呢&#xff1f;用途又是什么呢&#xff1f; 信号量就是解决进程之间竞争资源的情况&#xff0c;比如&#xff1a;我们在宿舍用的公共洗衣机&#xff0c;我们只有当它空闲的时候&#xff0c;我们才可以去使用它&#xff0c;当别人看到洗衣机在使用的时候&#xf…

LVS负载均衡群集部署(DR模式)

一.DR模式 LVS负载均衡群集部署 ipvsadm 工具选项说明&#xff1a; 工具选项作用-A添加虚拟服务器-D删除整个虚拟服务器-s指定负载调度算法&#xff08;轮询&#xff1a;rr、加权轮询&#xff1a;wrr、最少连接&#xff1a;lc、加权最少连接&#xff1a;wlc&#xff09;-a表示…

clickhouse-MergeTree

创建建表语句 create table t_order_mt(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id); 插入测试数据 insert into t_order_mt(id,sku_id,total_…

chatgpt赋能python:Python数据分析必备工具:Pandas

Python数据分析必备工具&#xff1a;Pandas Python作为一门流行的编程语言&#xff0c;广泛应用于数据科学领域。而Pandas作为Python语言下的数据分析库&#xff0c;被广泛地应用于数据处理、数据分析、数据可视化等方面。本文将介绍如何快速地入门Pandas并进行数据分析。 什…

《统计学习方法》——逻辑斯谛回归与最大熵模型(下)

最大熵模型 极大似然估计 下面证明对偶函数的极大化等价于最大熵模型的极大似然估计。 极大似然估计的思想就是通过概率最大化来求出最符合的分类。对应的步骤为&#xff1a; 根据训练集&#xff0c;写出不同分类下的概率函数将不同分类下的概率函数进行汇总&#xff0c;写…

[hsctf 2023] crypto,pwn,rev部分

刚完了天津又来个衡水,这个大部分题比较简单,最后两天整了3个crypto有点意思. crypto double-trouble 给了密文 Hvwg gvcizr bch ps hcc vofr. Wb toqh, W kwzz uwjs wh hc mci fwuvh bck! Hvs tzou wg hvs tczzckwbu: OmqemdOubtqdeMdqOaax Vcksjsf, wh wg sbqcrsr gc mci …