SpringCloud------注册中心Consul的使用介绍

1、consul安装

Consul 不同于 Eureka 需要单独安装,访问Consul 官网下载 Consul 的最新版本,我这里是 consul_1.2.1。

根据不同的系统类型选择不同的安装包,从下图也可以看出 Consul 支持所有主流系统。

我的是windows  64位  我以我的来演示

 下载下来是一个 consul_1.2.1_windows_amd64.zip 的压缩包,解压是是一个 consul.exe 的执行文件。

 新建文本文档run.txt,添加如下内容(readme内容也是如下,这里我是给自己备份一份而已):

consul agent -dev
pause

将run.txt修改为run.bat

双击run.bat,有如下显示则为启动consul成功

浏览器输入:127.0.0.1:8500   注:8500是consul默认的端口号 有如下页面即为启动consul服务成功

2、两个生产者(两个项目)

springcloud2.0_consul_provider

application.properties

spring.application.name=spring-cloud-consul-producer
server.port=8501
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#注册到consul的服务名称
spring.cloud.consul.discovery.serviceName=consul-producer

 pom.xml

<!-- springCloud 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<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>
		<!-- 监控 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- consul依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
		</dependency>
	</dependencies>
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

controller

@RestController
public class firstConsulController {
	
	@RequestMapping("/firstConsul")
	public String firstConsul() {
		
		return "firstConsul";
	}

}

 启动类

@SpringBootApplication
@EnableDiscoveryClient
public class AppConsulProvider {
	
	public static void main(String[] args) {
		SpringApplication.run(AppConsulProvider.class, args);
	}

}

springcloud2.0_consul_provider-2

application.properties

spring.application.name=spring-cloud-consul-producer-2
server.port=8503
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#注册到consul的服务名称
spring.cloud.consul.discovery.serviceName=consul-producer

pom.xml

<!-- 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<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>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
		</dependency>
	</dependencies>
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

controller

@RestController
public class firstConsulController {
	
	@RequestMapping("/firstConsul")
	public String firstConsul() {
		
		return "firstConsul2";
	}

}

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class AppConsulProvider2 {
	
	public static void main(String[] args) {
		SpringApplication.run(AppConsulProvider2.class, args);
	}

}

3、消费者(一个项目)

application.properties

spring.application.name=spring-cloud-consul-consumer
server.port=8504
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=8500
#设置不需要注册到 consul 中
spring.cloud.consul.discovery.register=false

pom.xml

<!-- springCloud 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<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>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
		</dependency>
	</dependencies>
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

 controller

@RestController
public class ConsulConsumerController {
	
	@Autowired
	private LoadBalancerClient loadBalancerClient;
	
	@Autowired
	private DiscoveryClient discoveryClient;
	
	/**
	 * 获取所有服务
	 * @return
	 */
	@RequestMapping("/services")
	public Object services() {
		
		return discoveryClient.getInstances("consul-producer");
	}

	 /**
     * 从所有服务中选择一个服务(轮询)
     */
    @RequestMapping("/discover")
    public Object discover() {
        return loadBalancerClient.choose("consul-producer").getUri().toString();
    }
    
    /**
     * 使用均衡负载的形式去获取服务端提供的服务
     * 
     */
    @RequestMapping("/call")
    public String call() {
    	 ServiceInstance serviceInstance = loadBalancerClient.choose("consul-producer");
         System.out.println("服务地址:" + serviceInstance.getUri());
         System.out.println("服务名称:" + serviceInstance.getServiceId());
         String result = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/firstConsul", String.class);
         System.out.println(result);
    	return result;
    }

}

 启动类

@SpringBootApplication
public class AppConsulConsumer {

	public static void main(String[] args) {
		SpringApplication.run(AppConsulConsumer.class, args);
	}

}

访问:

 

访问:http://127.0.0.1:8504/services    消费者调用services接口查看所有服务

用json转换后为:

 访问:http://127.0.0.1:8504/call  多刷新几次发现轮训交替     这也是consul实现负载均衡

访问:http://127.0.0.1:8504/discover  多刷新几次页面  同理访问call

我们已经成功的调用了 Consul 服务端提供的服务,并且实现了均衡负载功能。 

整体项目结构

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值