热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud中使用配置文件自定义RibbonClient

创建工程具体实现pom.xml

创建工程



具体实现


pom.xml


4.0.0com.itmuch.cloudmicroservice-consumer-movie-ribbon-customizing-properties0.0.1-SNAPSHOTjarorg.springframework.bootspring-boot-starter-parent1.4.3.RELEASEUTF-81.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.springframework.cloudspring-cloud-starter-eurekaorg.springframework.cloudspring-cloud-dependenciesCamden.SR4pomimportorg.springframework.bootspring-boot-maven-plugin




application.yml

server:port: 8010
spring:application:name: microservice-consumer-movie
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: true#这里选用的是负载均衡的[随机策略]
microservice-provider-user:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule


关键处:

#这里选用的是负载均衡的[随机策略]
microservice-provider-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

说明:还可以更换不同的策略;



User

package com.itmuch.cloud.study.user.entity;import java.math.BigDecimal;public class User {private Long id;private String username;private String name;private Integer age;private BigDecimal balance;public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Integer getAge() {return this.age;}public void setAge(Integer age) {this.age = age;}public BigDecimal getBalance() {return this.balance;}public void setBalance(BigDecimal balance) {this.balance = balance;}
}



ConsumerMovieApplication

package com.itmuch.cloud.study;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;/*** 用配置文件来完成自定义*/
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerMovieApplication {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(ConsumerMovieApplication.class, args);}
}



MovieController

package com.itmuch.cloud.study.user.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import com.itmuch.cloud.study.user.entity.User;@RestController
public class MovieController {private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class);@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping("/test")public String test() {ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user");System.out.println("--------随机:"+serviceInstance.getHost()+":"+serviceInstance.getPort()+":"+serviceInstance.getServiceId());ServiceInstance serviceInstance2 = this.loadBalancerClient.choose("microservice-provider-user2");System.out.println("--------轮询:"+serviceInstance2.getHost()+":"+serviceInstance2.getPort()+":"+serviceInstance2.getServiceId());return "1";}@GetMapping("/user/{id}")public User findById(@PathVariable Long id) {return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);}@GetMapping("/log-user-instance")public void logUserInstance() {ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user");// 打印当前选择的是哪个节点MovieController.LOGGER.info("{}:{}:{}", serviceInstance.getServiceId(), serviceInstance.getHost(), serviceInstance.getPort());}
}



启动测试


启动

启动eureka,在启动四个提供示例;



microservice-provider-user:8000

microservice-provider-user:8001(改端口)

microservice-provider-user2:8002(改服务名和端口)

microservice-provider-user2:8003(改服务名和端口)



查看eureka







访问测试

http://localhost:8010/test (多次访问)

控制台输出:

--------轮询:192.168.1.102:8002:microservice-provider-user2
--------随机:192.168.1.102:8000:microservice-provider-user
--------轮询:192.168.1.102:8003:microservice-provider-user2
--------随机:192.168.1.102:8000:microservice-provider-user
--------轮询:192.168.1.102:8002:microservice-provider-user2
--------随机:192.168.1.102:8000:microservice-provider-user
--------轮询:192.168.1.102:8003:microservice-provider-user2
--------随机:192.168.1.102:8000:microservice-provider-user
--------轮询:192.168.1.102:8002:microservice-provider-user2
--------随机:192.168.1.102:8001:microservice-provider-user
--------轮询:192.168.1.102:8003:microservice-provider-user2
--------随机:192.168.1.102:8001:microservice-provider-user
--------轮询:192.168.1.102:8002:microservice-provider-user2
--------随机:192.168.1.102:8001:microservice-provider-user
--------轮询:192.168.1.102:8003:microservice-provider-user2
--------随机:192.168.1.102:8001:microservice-provider-user
--------轮询:192.168.1.102:8002:microservice-provider-user2

......



#这里选用的是负载均衡的[随机策略]
microservice-provider-user:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule






==============================

QQ群:143522604

欢迎和大家一起学习、交流、提升!

==============================





推荐阅读
author-avatar
cb风雨彩虹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有