Eureka + Ribbon实现微服务的服务发现和负载均衡

目录

1:原理结构图

2:搭建Eureka Server服务注册中心

3:搭建Eureka Provider (服务提供者,即Eureka Client)

4:搭建 Eurka-Consumer


1:原理结构图

Eureka + Ribbon实现微服务的服务发现和负载均衡_第1张图片

2:搭建Eureka Server服务注册中心

创建工程,引入Eureka,创建好的工程pom文件如下:



	4.0.0

	com.eureka
	EurekaServer
	0.0.1-SNAPSHOT
	jar

	EurekaServer
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.1.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Greenwich.M3
	

	
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	



在启动类上加上 @EnableEurekaServer注解,启动注册服务中心,启动类代码如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class, args);
	}
}

配置application.yml文件 

server:
  port: 8081 #服务注册中心端口号

eureka:
  instance:
    hostname: 127.0.0.1 #服务注册中心IP地址
  client:
    registerWithEureka: false #是否向服务注册中心注册自己
    fetchRegistry: false #是否检索服务
    serviceUrl: #服务注册中心的配置内容,指定服务注册中心的位置
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

打成jar包,运行该工程后,在浏览器上输入http://127.0.0.1:8081,看到如下界面,目前该页面暂无注册的服务提供者和消费者

Eureka + Ribbon实现微服务的服务发现和负载均衡_第2张图片

3:搭建Eureka Provider (服务提供者,即Eureka Client)

创建工程,引入eureka 和spring boot web,其pom文件如下:



	4.0.0

	com.eureka
	EurekaProvider
	0.0.1
	jar

	EurekaProvider
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.1.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Greenwich.M3
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	



创建一个RestController访问方法:

        @Value("${server.port}")
	private String port;
	
	@GetMapping("/home")
	public String homePage() {
		return "Welcome to home page"+" : " + port;
	}

在启动类上加上 @EnableEurekaClient注解,申明是Eureka客户端

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient

public class EurekaProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaProviderApplication.class, args);
	}
}

配置application.yml文件 

eureka:
  client:
    serviceUrl: #注册中心的注册地址
      defaultZone: http://127.0.0.1:8081/eureka/
server:
  port: 8082  #服务端口号
spring:
  application:
    name: service-provider #服务名称--调用的时候根据名称来调用该服务的方法

 

 

打成jar,运行两个实例

java -jar EurekaProvider-0.0.1.jar   //配置文件中设置成8082端口

java -jar EurekaProvider-0.0.1.jar --server.port=8083

成功运行后,Eureka服务注册中心会注册两个provider实例,如下界面:

Eureka + Ribbon实现微服务的服务发现和负载均衡_第3张图片

4:搭建 Eurka-Consumer

主要目的是用来消费服务,同时提供负载均衡的功能。引入Eurka,web后的pom文件如下:



	4.0.0

	com.eureka
	EurekaConsumer
	0.0.1-SNAPSHOT
	jar

	EurekaConsumer
	Demo project for Spring Boot

	
		org.springframework.boot
		spring-boot-starter-parent
		2.1.1.RELEASE
		 
	

	
		UTF-8
		UTF-8
		1.8
		Greenwich.M3
	

	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.cloud
			spring-cloud-starter-netflix-eureka-server
		

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring-cloud.version}
				pom
				import
			
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

	
		
			spring-milestones
			Spring Milestones
			https://repo.spring.io/milestone
			
				false
			
		
	



在启动类中往spring boot容器中添加RestTemplate对象和IRule对象(用于负载均衡),后期会对常用的负载均衡策略方法做个总结。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;

@SpringBootApplication
@EnableEurekaClient

public class EurekaConsumerApplication {
	
	@LoadBalanced
	@Bean
    public RestTemplate rest() {
        return new RestTemplate();
    }
	

	@Bean
	public IRule ribbonRule() {
		return new RandomRule(); //随机负载均衡策略,如未向容器中注入,默认是轮询方式
	}
	
	

	public static void main(String[] args) {
		SpringApplication.run(EurekaConsumerApplication.class, args);
	}
}

注意:在往容器中注入RestTemplate对象时,需要加上@LoadBalanced注解,否则不能正常访问Eurka中的服务。其原理可以参考https://blog.csdn.net/jin5203344/article/details/80496078

添加Controller,提供给外部访问的接口以及访问provider提供的接口

@RestController

public class goHomePage {
	
	@Autowired
	private RestTemplate restTemplate;
	
	
	@GetMapping("/home")
	public String getHome() {
		
		String data = restTemplate.getForObject("http://service-provider/home", String.class);
		
		return data;
	
	}

}

配置application. yml

eureka:
  client:
    serviceUrl: #注册中心的注册地址
      defaultZone: http://127.0.0.1:8081/eureka/
server:
  port: 8093  #服务端口号
spring:
  application:
    name: service-consumer #服务名称--调用的时候根据名称来调用该服务的方法

运行Consumer项目,在Eureka 注册中心的管理页面上可以看到其注册信息

Eureka + Ribbon实现微服务的服务发现和负载均衡_第4张图片

目前为止,已经完成 Eureka的注册中心,服务提供者,消费者。在浏览器中输入http://127.0.0.1:8093/home 即可访问到服务提供者提供的数据,如下截图:

Eureka + Ribbon实现微服务的服务发现和负载均衡_第5张图片

Eureka + Ribbon实现微服务的服务发现和负载均衡_第6张图片

Eureka在开发调试时会涉及到多个服务提供者,不适合点对点的调测,故后续会记录点对点的直连方式,结构如下:

Eureka + Ribbon实现微服务的服务发现和负载均衡_第7张图片

 

 

 

 

你可能感兴趣的:(Eureka + Ribbon实现微服务的服务发现和负载均衡)