目录
3.3:8091和8092的controller的业务代码如下
1:Consul是什么
承接SpringCloud第二章(服务治理Eureka),在Springcloud中,实现服务治理的的中间件有Eureka、zookppper、consul、nacos。
这几种中间组都可以实现服务治理的功能,但是eureka已经停止更新。所有我们接着介绍consul来实现服务治理。
consul是go语言开发的。
2:用consul来实现服务治理
2.1:下载安装consul ,https://www.consul.io/downloads.html 官网下载mac端
2.2:将解压后的文件consul 拷贝到/usr/local/bin下 sudo cp consul /usr/local/bin
2.3:打开bin文件,执行consul,查看consul命令,如下即表示成功
2.4: 执行consul --version 查看版本
2.5:consul agent -dev 启动consul
2.6:打开http://localhost:8500/地址查看consul页面证明服务已经没问题了
3:创建项目
项目简介,我们创建两个相同的服务8091和8092挂在到consul上,服务返回不同的端口号,用来分辨consul负载均衡。没有具体的的业务代码,项目只介绍中间件的功能。
3.0:通用的pom文件配置
<dependencies>
<!--Spring web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Springcloud的consul组件 -->
<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>
<dependency>
<groupId>com.thit</groupId>
<artifactId>ShopCommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 这个需要为 true 热部署才有效 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
</dependencies>
3.1:创建服务8091
#端口号
server.port=8091
#eureka管理页面显示服务名字 多个相同的服务可以用相同的名字来负载访问
spring.application.name=consulclients
#consul服务名字
spring.cloud.consul.discovery.service-name=${spring.application.name}
spring.cloud.consul.discovery.hostname=localhost
#spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
3.2:创建服务8092
#端口号
server.port=8092
#eureka管理页面显示服务名字 多个相同的服务可以用相同的名字来负载访问
spring.application.name=consulclients
#consul服务名字
spring.cloud.consul.discovery.service-name=${spring.application.name}
spring.cloud.consul.discovery.hostname=localhost
#spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
3.3:8091和8092的controller的业务代码如下
@RestController
public class UserController {
@Value("${server.port}")
private String port;
@RequestMapping(value = "/add",method = RequestMethod.GET)
public String add(){
System.out.println("consul负载服务返回端口号:"+port);
return "端口号:"+port;
}
}
3.4:8091和8092启动类,这里粘贴一个
/**
* @author :huyiju
* @date :2020-04-09 18:09
*/
@SpringBootApplication
@ComponentScan(basePackages= {"com.thit"})
@EnableDiscoveryClient //consul 这里必须使用EnableDiscoveryClient 注解
public class ConsulClient1Application {
public static void main(String[] args) {
SpringApplication.run(ConsulClient1Application.class,args);
}
}
启动连个服务之后,页面服务可管理
3.5:服务调用者8081配置和代码
配置文件
#端口号
server.port=8081
#eureka管理页面显示服务名字 多个相同的服务可以用相同的名字来负载访问
spring.application.name=consulservice1-8081
#consul服务名字
spring.cloud.consul.discovery.service-name=${spring.application.name}
spring.cloud.consul.discovery.hostname=localhost
#spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
启动类
@SpringBootApplication
@ComponentScan(basePackages= {"com.thit"})
@EnableDiscoveryClient //consul EnableDiscoveryClient
public class ConsulClient2Application {
public static void main(String[] args) {
SpringApplication.run(ConsulClient2Application.class,args);
}
}
controller代码,调用consul,负载到两台服务器上,并且返回不同的端口
@RestController
public class UserController {
//使用eureka 注册管理服务 使用的是使用consul中的服务名字
public static final String URL1="http://consulclients/add";
@Autowired
RestTemplate restTemplate1;
@RequestMapping("/test")
public String hello1() {
String a= restTemplate1.getForObject(URL1,String.class);
return a;
}
}
3.6:服务调用者测试结果
服务调用者启动之后,访问服务调用者的controller代码,在controller代码中访问consul,得到负载之后的端口号