consul注册中心
consul注册中心准备
下载方式:链接:https://pan.baidu.com/s/1JpoJq1zvV0TUBlh3_5pKLw 提取码:neg1
1、下载consul.exe软件,在cmd运行
2、查看版本
3、运行consul注册中心consul agent -dev,启动代理程序
4、测试一下成功没,http://localhost:8500,由于刚才我注册过,所以有两个xx的服务,如果出现这个页面表示consul能用
consul客户端服务
模拟两个服务在注册中心进行注册后,相互通信查询数据
product数据源服务
1、创建product9997服务模块
2、老规矩,配置pom,添加版本号配置+consul+健康检查配置
<properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR6</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <!--这个包是用来健康监控的--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3、配置文件properties
#开放的端口号
server.port=9997
#注册客户端服务的名字
spring.application.name=product9997
spring.cloud.consul.host=localhost
#注册consul服务的主机 这个是哪个consul.exe 的服务端口号 我们下载了哪个exe 运行以后就有了consul服务注册中心
#不像eureka那样 在一个电脑上要做一个eurekaserver
spring.cloud.consul.port=8500
#注册consul服务的端口号 关闭了consul服务的健康检查 不推荐
#spring.cloud.consul.discovery.register-health-check=false
#指定注册服务名称 默认就是应用名
#spring.cloud.consul.discovery.service-name=${spring.application.name}
4、启动类
package com.example.product9997; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class Product9997Application { public static void main(String[] args) { SpringApplication.run(Product9997Application.class, args); } }
5、controller模仿数据源
package com.example.product9997.controller; import lombok.extern.log4j.Log4j; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.actuate.autoconfigure.hazelcast.HazelcastHealthContributorAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RestController //@Slf4j //日志注解 public class ProductController { @Value("${server.port}") private int port; @RequestMapping("/product/findps") public Map<String, Object> findPs() { System.out.println("商品调用成功" + port); //使用一个map 装数据 Map<String,Object> map = new HashMap<String, Object>(); map.put("msg", "服务调用成功:" + port); map.put("status", true); //放一个数据状态 return map; } }
user访问服务
1、创建user9998服务模块
2、老规矩pom.xml,这里配置了版本管理+consul配置+健康检查
<properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR6</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!--consul注册中心的依赖 因为eureka2.0已经停止更新 所以就没有去用他--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <!--这个包是用来健康监控的--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
3、properties配置
#开放的端口号
server.port=9998
#注册客户端服务的名字
spring.application.name=user9998
spring.cloud.consul.host=localhost
#注册consul服务的主机 这个是哪个consul.exe 的服务端口号 我们下载了哪个exe 运行以后就有了consul服务注册中心
#不像eureka那样 在一个电脑上要做一个eurekaserver
spring.cloud.consul.port=8500
#注册consul服务的端口号 关闭了consul服务的健康检查 不推荐
#spring.cloud.consul.discovery.register-health-check=false
#指定注册服务名称 默认就是应用名
#spring.cloud.consul.discovery.service-name=${spring.application.name}
4、applicaton注解,其实这个注解可以加可以不加,consul最新版默认是可以省略的
@SpringBootApplication @EnableDiscoveryClient public class User9998Application { public static void main(String[] args) { SpringApplication.run(User9998Application.class, args); } }
5、controller,从另一个服务拿数据
package com.example.user9998.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController //包裹的是一个json字符串 public class UserController { @GetMapping("/user/findps") public String findps(){ System.out.println("正在调用用户端"); //http请求工具去访问 RestTemplate restTemplate = new RestTemplate(); //访问另一台机器上的端口 String ps = restTemplate.getForObject("http://localhost:9997/product/findps", String.class); return ps; } }
测试
1、在consul中查看两个服务是否注册,http://localhost:8500/
2、这里需要从user模块中的controller去访问,拿到product中的数据
注意
服务之间的访问,使用的http协议,restTemplate工具发送请求,从注册中心的注册地址,查找到该服务进行调用。