Ribbon实现点(Consumer)对点(Provider)直连

1:写在开头

   在特殊情况下(比如开发测试阶段),不需要经过Eureka注册服务来访问Provider,可以利用Ribbon手动来指定一个或者多个Provider服务来实现负载均衡访问。结构如下图:

2:Consumer开发

 A:在POM文件中引入ribbon,需要注意的是,如果POM中有Eureka的依赖,则需要去除Eureka的依赖。主要的POM如下

        <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.M3</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

B:配置application.yml文件

server:
  port: 8093  #服务端口号
spring:
  application:
    name: service-consumer #服务名称--调用的时候根据名称来调用该服务的方法

ribbon: #关闭Eureka
  eureka:
   enabled:false
   
service-provider: #指定具体的Provider服务清单,多个用,隔开
    ribbon:
       listOfServers: http://127.0.0.1:8082,http://127.0.0.1:8083

注意:application.yml中不能用table键来对齐,key:和value之间有空格

C:利用RestTemplate和ribbon来实现负载均衡访问provider服务。

        @Autowired
	private RestTemplate restTemplate;
	
	@Autowired
	private LoadBalancerClient loadBalancerClient;//ribbon 负载均衡客户端
	
	@GetMapping("/home")
	public String getHome() {
		
		ServiceInstance si=loadBalancerClient.choose("service-provider");
		StringBuffer sb=new StringBuffer("");
		sb.append("http://");
		sb.append(si.getHost());
		sb.append(":");
		sb.append(si.getPort());
		sb.append("/home");
		System.out.println(sb.toString());
		
		String data = restTemplate.getForObject(sb.toString(), String.class);
		return data;
	
	}

注意: loadBalancerClient.choose("service-provider")中的service-provider需要和application.yml中配置的服务清单名一致.

D:启动启动类,运行项目

@SpringBootApplication

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

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

E:启动Provider服务,启动的IP和端口和Consumer服务中配置的服务清单一致 ,此处就不详细描述Provider的搭建,在写本文的时候,启动了两个实例http://127.0.0.1:8082,http://127.0.0.1:8083

F:在测试工具中输入Consumer的访问地址,可以看到Provider返回的数据.

猜你喜欢

转载自blog.csdn.net/deng_zhi_hai/article/details/85116494