目录
SpingCloud整合Consul实现服务注册
前言
一.环境准备
二.编写服务提供者模块
三.测试服务提供者模块是否搭建成功
四.编写服务消费者模块
五.测试服务消费者模块是否搭建成功
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。
它提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务网格解决方案。能够很容易和springcloud等微服务框架集成。
如果还未配置consul环境的同学可以移步我的另外一篇文章喔,那里对如何在Windows环境下安装consul有着很详细的介绍~
Window环境下Consul的介绍与安装教程(超详细!!)https://blog.csdn.net/weixin_47025166/article/details/125502753?spm=1001.2014.3001.5502
在cloud2022项目中的pom.xml导入springcloud依赖和一些常规依赖
4.0.0
com.canrioyuan
cloud2022
1.0-SNAPSHOT
pom
cloud-provider-payment8001
cloud-consumer-order80
cloud-api-commons
cloud-eureka-server7001
cloud-eureka-server7002
cloud-provider-payment8002
cloud-provider-payment8004
UTF-8
1.8
1.8
4.12
1.2.17
1.18.24
8.0.21
1.1.21
3.5.1
org.springframework.boot
spring-boot-dependencies
2.2.2.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR1
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid-spring-boot-starter
${druid.version}
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.spring.boot.version}
junit
junit
${junit.version}
log4j
log4j
${log4j.version}
org.projectlombok
lombok
${lombok.version}
true
org.springframework.boot
spring-boot-maven-plugin
true
true
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
#consul服务端口号
server:
port: 8006
spring:
application:
name: consul-provider-payment #服务名字
#consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
package com.canrioyuan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //该注解用于使用consul和zookeeper时作为注册中心提供服务
public class PaymentMain8006 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8006.class,args);
}
}
package com.canrioyuan.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.UUID;
@RestController
@Slf4j
public class PaymentController {
@Value("${sever.port}")
private String serverPort;
@GetMapping(value="/payment/consul")
public String paymentConsul(){
return "springcloud with consul"+serverPort+"\t"+ UUID.randomUUID().toString();
}
}
在命令行端口输入consul agent -dev,启动consul
consul agent -dev
启动成功后如下图所示
运行成功后如下图所示:
访问成功后如下图所示
可以看到consul的web端中已经对服务提供者的服务进行注册
org.springframework.cloud
spring-cloud-starter-consul-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
###consul服务端口号
server:
port: 80
spring:
application:
name: cloud-consumer-order
####consul注册中心地址
cloud:
consul:
host: localhost
port: 8500
discovery:
#hostname: 127.0.0.1
service-name: ${spring.application.name}
package com.canrioyuan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderConsulMain80.class, args);
}
}
package com.canrioyuan.controller;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationContextConfig {
/**
* RestTemplate是Spring提供的用于访问Rest服务的客户端,
* 它提供了很多可以方便访问远程http服务的方法,这些方法可以帮助开发人员减少编写客户端代码的工作量。
* @return
*/
@Bean //将RestTemplate注册到容器中
/**
* @LoadBalanced注解,我们在使用这个注解后,就能在调用其他微服务的时候,通过服务实例名称就能进行调用其他的微服务,
* 而不是直接把要调用的微服务的ip和端口号写死在代码当中。
*/
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
package com.canrioyuan.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class OrderConsulController
{
public static final String INVOKE_URL = "http://cloud-provider-payment"; //consul-provider-payment
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/consul")
public String paymentInfo()
{
String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
System.out.println("消费者调用支付服务(consule)--->result:" + result);
return result;
}
}
访问成功后如下图所示
可以看到我们的消费者模块和服务提供者模块都已经被注册进Services中