上篇文章我们介绍了Eureka的集群环境搭建,本文我们来通过Eureka作为注册中心来实现一个案例,案例结构如下
一、启动Eureka服务在我们部署的Eureka几点上分别指向如下命令,启动Eureka服务
./server.sh start复制代码二、构建Provider服务
1.创建SpringBoot项目
2.修改pom文件
添加相关依赖,注意此处添加的Eureka的依赖不需要加"-server"
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>复制代码
3.修改启动类
在启动类的头部开启Eureka客户端的主键
4.添加配置信息
在application.properties中添加如下的信息
spring.application.name=eureka-provider server.port=9090 # 设置服务注册中心地址,指向另一个注册中心 eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/复制代码
注意eureka1和eureka2我们需要在hosts文件中配置映射如下
5.添加服务
创建pojo
package com.dpb.springcloud_eureka_provider.pojo; /** * @program: springcloud-eureka-provider * @description: UserBean * @author: 波波烤鸭 * @create: 2019-05-28 17:31 */ public class User { private int userid; private String username; private int userage; public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getUserage() { return userage; } public void setUserage(int userage) { this.userage = userage; } public User(int userid, String username, int userage) { this.userid = userid; this.username = username; this.userage = userage; } public User() { } }复制代码
创建控制器
/** * @program: springcloud-eureka-provider * @description: 服务提供者 * @author: 波波烤鸭 * @create: 2019-05-28 17:30 */ @RestController public class UserController { @RequestMapping("/user") public List<User> getUsers(){ List<User> list = new ArrayList<>(); list.add(new User(1,"zhangsan",20)); list.add(new User(2,"lisi",22)); list.add(new User(3,"wangwu",20)); return list; } }复制代码
6.启动服务
启动服务,在注册中心我们可以看到我们的服务提供者
三、构建Consumer服务创建服务的消费者,和提供者差不多。
1.创建项目
2.pom依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>复制代码
3.启动类
4.配置文件
spring.application.name=eureka-consumer server.port=9091 #设置服务注册中心地址,指向另一个注册中心 eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/复制代码
5.完成服务调用
消费者完成服务端服务的调用
service中代码
/** * @program: springcloud-eureka-consumer * @description: 用户的业务处理 * @author: 波波烤鸭 * @create: 2019-05-28 17:43 */ @Service public class UserService { /** * ribbon 负载均衡 * LoadBalancerClient 通过服务名称可以获取对应的服务的相关信息 ip port等 */ @Autowired private LoadBalancerClient loadBalancerClient; public List<User> getUsers(){ // ServiceInstance 封装的有服务的基本信息 IP和端口等 ServiceInstance si = this.loadBalancerClient.choose("eureka-provider"); StringBuilder sb = new StringBuilder(); sb.append("http://") .append(si.getHost()) .append(":") .append(si.getPort()) .append("/user"); // SpringMVC RestTemplate RestTemplate rt = new RestTemplate(); ParameterizedTypeReference<List<User>> type = new ParameterizedTypeReference<List<User>>() {}; // ResponseEntity:封装了返回值的信息 ResponseEntity<List<User>> response = rt.exchange(sb.toString(), HttpMethod.GET,null,type); List<User> list = response.getBody(); return list; } }复制代码
接口 | 说明 |
---|---|
LoadBalancerClient | 负载均衡器,根据服务名称可以获取对应服务的ip和host等信息 |
RestTemplate | Rest服务模板,可以完成服务的调用 |
控制器代码
/** * @program: springcloud-eureka-consumer * @description: 用户控制器 * @author: 波波烤鸭 * @create: 2019-05-28 17:40 */ @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("/consumer") public List<User> getUsers(){ return this.userService.getUsers(); } }复制代码
6.启动服务
启动服务后我们在eureka注册中心可以发现服务。
请求消费者的接口来获取服务提供者提供的数据。
案例成功~