consul作为SpringCloud注册中心

一、consul 简介
Consul是一种服务发现和配置工具。Consul具有分布式,高可用性和极高的可扩展性。

  • 服务发现 - 使用简单的服务来注册自己并通过DNS或HTTP接口发现其他服务。也可以注册SaaS提供商等外部服务。
  • 运行状况检查 - 运行状况检查使Consul能够快速向运营商发出有关群集中任何问题的警报
    与服务发现的集成可防止将流量路由到不健康的主机,并启用服务级别的断路器。
  • 密钥/值存储 - 灵活的密钥/值存储可以存储动态配置,功能标记,协调,leader选举等。简单的HTTP API使其易于在任何地方使用。
    多数据中心 - Consul可以识别数据中心,并且可以支持任意数量的区域而无需复杂的配置。
  • 服务分段 - Consul Connect通过自动TLS加密和基于身份的授权实现安全的服务到服务通信。

官网地址:https://www.hashicorp.com/products/consul/
github:https://github.com/hashicorp/consul
注意:在本地启用consul 需要通过cmd 命令行,详见:
https://jingyan.baidu.com/article/ca41422f732f961eaf99ed5f.html

二、SpringCloud 用 consul作为注册中心
2.1 服务提供方
1) pom依赖

<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR1</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>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</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>
	

2)配置文件

application.properties

#0表示服务器随机端口
server.port=0
#consul  地址
spring.cloud.consul.host=localhost
#consul  端口
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.prefer-ip-address=true

bootstrap.properties

#服务名称
spring.application.name=waiter-service

3)代码配置

@SpringBootApplication
@EnableDiscoveryClient
public class WaiterServiceApplication implements WebMvcConfigurer {

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

2.2 服务消费方
1) pom依赖

<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR1</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>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</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>
	

2)配置文件
application.properties

#0表示服务器随机端口
server.port=0
#consul  地址
spring.cloud.consul.host=localhost
#consul  端口
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.prefer-ip-address=true

bootstrap.properties

#服务名称
spring.application.name=customer-service

3)代码配置

@SpringBootApplication
@Slf4j
@EnableDiscoveryClient
public class CustomerServiceApplication {

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

	@Bean
	public HttpComponentsClientHttpRequestFactory requestFactory() {
		PoolingHttpClientConnectionManager connectionManager =
				new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS);
		connectionManager.setMaxTotal(200);
		connectionManager.setDefaultMaxPerRoute(20);

		CloseableHttpClient httpClient = HttpClients.custom()
				.setConnectionManager(connectionManager)
				.evictIdleConnections(30, TimeUnit.SECONDS)
				.disableAutomaticRetries()
				// 有 Keep-Alive 认里面的值,没有的话永久有效
				//.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE)
				// 换成自定义的
				.setKeepAliveStrategy(new CustomConnectionKeepAliveStrategy())
				.build();

		HttpComponentsClientHttpRequestFactory requestFactory =
				new HttpComponentsClientHttpRequestFactory(httpClient);

		return requestFactory;
	}

	@LoadBalanced
	@Bean
	public RestTemplate restTemplate(RestTemplateBuilder builder) {
		return builder
				.setConnectTimeout(Duration.ofMillis(100))
				.setReadTimeout(Duration.ofMillis(500))
				.requestFactory(this::requestFactory)
				.build();
	}
}

2.3 验证 服务注册结果

在这里插入图片描述
注意:

  • 本地运行的时候,consul服务重启后, 节点无法重新自动注册到 注册中心,需要重启节点服务;
  • 在网上看到 consul 集群模式的时候,还有节点上下线节点信息无法更新问题;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值