之前介绍了如何搭建eureka服务并开发了一个用户服务成功注册到了eureka中,接下来介绍如何通过ribbon来从eureka中获取用户服务;
springcloud ribbon提供客户端的负载均衡算法,首先会从eureka中获取服务列表然后通过负载均衡的算法去调用指定的服务;接下来将开发一个登录的微服务通过整合ribbon来调用用户服务
关键代码如下:
pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 导入Eureka服务的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <!--<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>--> </dependencies> <!-- 导入Spring Cloud的依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Edgware.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
application.properties:
server.port=8080 #应用名称 spring.application.name=loginServer # 是否需要将自己注册到注册中心中,默认值true eureka.client.registerWithEureka=false # 是否从注册中心中获取注册信息,默认值true eureka.client.fetchRegistry=true # 客户端和服务端进行交互的地址 eureka.client.serviceUrl.defaultZone= http://127.0.0.1:7070/eureka/, http://127.0.0.1:7071/eureka/ #将自己的ip地址注册到Eureka服务中 eureka.instance.prefer-ip-address=true
启动类:
package com.darling.login; 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.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.context.annotation.Bean; import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; //@EnableFeignClients //@EnableHystrix @EnableDiscoveryClient @SpringBootApplication public class LoginApplication { @Bean @LoadBalanced // 表示使用负载均衡算法 public RestTemplate getRestTemplate(){ return new RestTemplate(new OkHttp3ClientHttpRequestFactory()); } public static void main(String[] args) { SpringApplication.run(LoginApplication.class, args); } }
下面列举下上述代码的关键:
1、pom中引入okhttp的依赖,当然也可以引入别的Http-client的依赖
2、application中eureka.client.fetchRegistry=true表示从eureka中获取注册信息;eureka.client.serviceUrl.defaultZone的值填入我们之前开发好的两个eureka服务的地址
3、启动类加@EnableDiscoveryClient注解表示自己是eureka的客户端
4、最关键的,启动类中记得配置restTemplate,当然也可以通过@Configuration注解重新开发一个类进行配置
上面的都实现了基本算是成功整合了ribbon了,下面看看如何进行调用,贴上调用用户服务的关键代码:
@Autowired private RestTemplate restTemplate; public User checkUser(String name,String pwd){ String serviceId = "USERSERVER"; // 关键,通过服务名调用而不是ip,因为我们有两个eureka服务 User user = restTemplate.getForObject("http://"+serviceId+"/user/"+name,User.class); if(user != null) { if(pwd.equals(user.getPwd())) { return user; } } return null; }
至此,springcloud的eureka、ribbon的入门级demo算是学习完毕了,希望日后工作中能够用到!