微服务学习回顾1

本文介绍了微服务注册中心的搭建与使用,包括Eureka和Nacos。首先讲解了如何搭建Eureka Server并注册微服务,然后转向Nacos的安装、服务注册和集群配置。此外,还探讨了Nacos的环境隔离、负载均衡策略以及如何修改负载均衡规则。
摘要由CSDN通过智能技术生成

微服务远程调用

在需要远程调用的微服务的启动类中注入RestTemplate.

@SpringBootApplication
public Class OrderApplication{
	public static void main(String args){
		SpringApplication.run(OrderApplication.class,args)
	}
	@Bean
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}

在Service上使用restTemplate.getForObject(url,Class)方法,进行远程调用.

@AutoWired
private RestTemplate resttemplate;

public Order queryOrderById(String id){
	//省略...
	String url = "http://localhost:8080/user/"+order.getUserId();
	User user = restTemplate.getForObject(url,User.class);
	//省略...
}

注册中心

Eureka

搭建EurekaServer注册中心

  1. 在服务端项目中导入EurekaServe的启动器依赖.
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 在EurekaServer项目的配置文件中配置Eureka地址信息,及应用信息
server:
	port: 10000
spring:
	application:
		name: EurekServer
eureka:
	client:
		serviec-url:
			defaultZone: http://127.0.0.1:10000/eureka/
  1. 在启动类上添加@EnableEurekaServer注解,启用EurekaServer.

注册微服务

1.在微服务项目的pom文件中引入依赖

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

2.在项目的application.yml文件中配置应用名称和Eureka注册中心地址

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

3.在启动类上添加@EnableDiscovery开启发现,并在注入RestTemplate时,添加负载均衡@LoadBalanced注解

@SpringBootApplication
@EnableDiscovery
public Class OrderService{
	public static void main(String args){
		SpringApplication.run(OrderService.class,args);
	}
	@Bean
	@LoadBalanced
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}

4.在远程调用方法上中将url地址中的主机名+服务端口改成服务名称,服务地址不用再写死.
修改前:String url = "http://localhost:8080/user/"+order.getUserId();
修改后:String url = "http://userservice/user/"+order.getUserId();

Nacos

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

安装及启用Nacos服务

  • 下载Nacos
  • 解压至非中文路径
  • 修改配置信息
    3.1 单机环境仅需要修改
    3.2 集群环境需要修改端口号,数据库连接信息,及创建Nacos数据库及数据表
  • 启动Nacos
    4.1 单机环境启动运行startup.cmd -m standalond
    4.2 集群环境直接运行startup.cmd即可

注册到Nacos服务

  • 在父项目中添加spring-cloud-alibaba的管理依:
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-alibaba-dependencies</artifactId>
	<version>2.2.6.RELEASE</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>
  • 在微服务的pom文件中引入NacosDiscovery依赖
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 修改配置文件,将服务注册到Nacos
spring:
	cloud:
		nacos:
			server-addr: 127.0.0.1:8848	#nacos服务端地址

Nacos集群

服务调用尽可能选用本地集群的服务,跨集群调用延迟较高,
需求:优先访问本地集群,当本地集群不可访问时,再调用其他集群.

指定集群

通过spring.cloud.nacos.discovery.cluster-name:BJ属性指定服务所在集群名称或者是机房位置

spring:
	cloud:
		nacos:
			server-addr: 127.0.0.1:8848
			discovery:
				cluster-name: BJ #指定集群名称或机房位置
根据集群负载均衡

需要设置负载均衡规则为:com.alibaba.cloud.nacos.ribbon.NacosRule

Nacos环境隔离 namespace

Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离.
不同namespace下的服务互相不可见
每个namespace都有唯一的ID

创建namespace

在Nacos控制台新建命名空间,用来隔离不同环境

指定命名空间

在微服务的配置文件中通过spring.cloud.nacos.discovery.namespace:xxxxxx属性指定服务所在的命名空间,值为namespace的ID,而不是名称.

spring:
	cloud:
		nacos:
			discovery:
				cluster-name: BJ #指定集群名称,或机房位置
				namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #指定命名空间namespace

负载均衡

Robbin

在注入RestTemplate对象时,添加的@LoadBalanced注解,在通过RestTemplate做远程调用时,Robbin会自动拦截发送的请求,向EurekaServer拉去服务列表后,并通过IRule接口的实现规则,完成负载均衡,再向选中的实例发起请求.
在这里插入图片描述

内置的负载均衡策略
内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule对以下两种服务器进行忽略:
(1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。
(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的..ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule
(默认方案)
以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule随机选择一个可用的服务器。
RetryRule重试机制的选择逻辑
修改负载均衡策略
  1. 通过代码方式修改,在启动类中定义一个新的IRule,并注入
	@Bean
	public IRule randomRule(){
		return new RandomRule();
	}
  1. 修改微服务配置文件,指定调用某个微服务时采用的负载均衡策略
userservice:
	robbin:
		NFLoadBalancedRuleClassName: com.netflix.loadbalanced.RandomRule.

区别:
采用代码的注入IRule的方式为全局策略,该微服务下远程调用所有的微服务对象均采用注入的规则.
采用配置文件的方式仅针对某个远程调用某个微服务时生效.

Robbin的加载方式

robbion默认为懒加载方式,当首次远程调用微服务时,LoandBalancedClient才会加载,会导致首次远程调用用时过长.可以修改为饥饿加载方式.(需要指定采用饥饿加载方式的微服务)

ribbon:
	eager-load:
		enable: true #启用饥饿加载
		clients: userservice #指定采用饥饿加载的服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值