我们在前面创建了EreukaClient ,注解为@EnableEurekaClient
现在我们将这个client引入ribbon变成负载均衡,首先把它变为可发现的,@EnableDiscoveryClient
关于两者的区别:
SpringCLoud中的“Discovery Service”有多种实现,比如:eureka, consul, zookeeper。
1,@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,并且在classpath中实现;
2,@EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;
如果你的classpath中添加了eureka,则它们的作用是一样的。
其实用更简单的话来说,就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。
为了让它变成负载均衡,先创建一个兄弟服务。两者端口号,分别为8762和8763,并拥有同一个应用名称:cloud-service。
扫描二维码关注公众号,回复:
5103572 查看本文章
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8762
spring:
application:
name: cloud-service
两者都提供一个请求接口,返回的字符串显示各自的端口号。
@RestController @RequestMapping(value = "/ribbon") public class RibbonTestApi { /** * 获取博客名称API * * @return 相关信息 */ @RequestMapping(value = "name", method = RequestMethod.GET) public String getMyBlogNameApi() { return "111111111111111"+"该服务器端口号:8762"; // or 8763 } }
接下来创建一个调用这个/ribbon/name的请求的服务端。
@SpringBootApplication @EnableDiscoveryClient public class CloudRibbonApplication { private static final Logger logger = LogManager.getLogger(CloudRibbonApplication.class.getName()); public static void main(String[] args) { SpringApplication.run(CloudRibbonApplication.class, args); } /** * Spring提供的用于访问Rest服务的客户端 * @return */ @Bean @LoadBalanced RestTemplate restTemplate() { logger.info("LoadBalanced restTemplate from ribbon client"); return new RestTemplate(); } }
创建一个TestRibbonApi类:
@RestController @RequestMapping(value = "/test") public class TestRibbonApi { /** * 注入RestTemplate */ @Autowired RestTemplate restTemplate; @RequestMapping(value = "/name" ,method = RequestMethod.GET) public String testGetNameOfBlog(){ String url="http://CLOUD-SERVICE/ribbon/name"; return restTemplate.getForObject(url,String.class); } }
将它们分别启动可以看到: