文档章节

Consul+Spring boot的服务注册和服务注销

亚林瓜子
 亚林瓜子
发布于 06/24 18:13
字数 573
阅读 44
收藏 3

一图胜千言

consul架构

先看一看要做事情,需要在Consul上面实现注册中心的功能,并以2个Spring boot项目分别作为生产者,消费者。

Consul

假设已经完成文章《Consul的开发者模式之Docker版》中的所有的配置,并启动了Consul,访问:http://localhost:8500/ui/dc1/services 即如下图: Consul Web界面

生产者

生产者-目录结构

项目目录结构

这里就是一个简单的spring boot工程。

生产者-build.gradle

plugins {
	id 'org.asciidoctor.convert' version '1.5.3'
	id 'org.springframework.boot' version '2.1.6.RELEASE'
	id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.zyl'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
	developmentOnly
	runtimeClasspath {
		extendsFrom developmentOnly
	}
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

ext {
	set('snippetsDir', file("build/generated-snippets"))
	set('springCloudVersion', "Greenwich.SR1")
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
	implementation "org.springframework.boot:spring-boot-starter-actuator"
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	developmentOnly 'org.springframework.boot:spring-boot-devtools'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

test {
	outputs.dir snippetsDir
}

asciidoctor {
	inputs.dir snippetsDir
	dependsOn test
}

生产者-bootstrap.properties

spring.application.name=consul-producer

生产者-application.properties

server.port=0

spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.health-check-critical-timeout=90m

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

spring.jackson.serialization.indent_output=true

生产者-config.properties

这个文件什么都没有,主要是解决一个警告。

生产者-Application.java

@EnableDiscoveryClient

表示启用服务发现客户端。

消费者

消费者包含以上配置,只是在调用生产者接口都部分有所不同。

消费者-目录结构

消费者-目录结构

消费者-Application.java

package com.zyl.consulconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

import java.time.Duration;

@SpringBootApplication
@EnableDiscoveryClient
public class Application {

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

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

}

这里主要就是启用服务发现客户端,和启用resttemplate的负载均衡。

消费者-DemoController.java

package com.zyl.consulconsumer.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class DemoController {

    private final RestTemplate restTemplate;

    public DemoController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @RequestMapping("/")
    public String home() {
        return restTemplate.getForObject("http://consul-producer/", String.class);
    }
}

注意这里调用的时候只要使用consul注册中心发现的服务名,进行调用即可。

注册后效果

注册中心后效果

这是consul注册中心的页面效果,生产者和消费者都已经注册到consul了。

调用效果

consul注册中心调用效果

源代码

https://github.com/fxtxz2/consul-springboot

参考

© 著作权归作者所有

亚林瓜子

亚林瓜子

粉丝 22
博文 240
码字总数 79784
作品 0
长沙
高级程序员
私信 提问
注册中心 eureka 和spring boot admin

官方文档对Spring-Boot-Admin安全的介绍 保护Spring Boot Admin Server 由于解决分布式Web应用程序中的身份验证和授权有多种方法,因此Spring Boot Admin不提供默认方法。 如果在依赖项中包含...

jxlgzwh
04/28
0
0
Spring Cloud(服务发现Eureka)

服务发现 服务发现机制是为了解决硬网络编码问题,服务消费者使用这种机制获取服务提供者网络信息,当微服务网络地址发生变更(例如IP或端口),会重新注册到服务发现组件,而服务消费者就无...

林塬
2017/12/16
0
0
Spring Cloud 服务注册与发现、高可用(Eureka)

Spring Cloud 服务注册与发现、高可用(Eureka) 一、服务发现 1.1 服务发现 在微服务架构中,服务发现组件是很关键的一个组件,服务发现组件就是去管理各服务的网络地址等信息 服务提供者、...

非摩尔根
04/17
0
0
springCloud(6):Eureka的自我保护模式、多网卡下的IP选择、Eureka的健康检查

一、Eureka的自我保护模式 进入自我保护模式最直观的体现就是Eureka Server首页的警告,如下图: 默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server...

我爱大金子
2017/06/25
0
0
服务发现的可行方案以及实践案例

为什么要使用服务发现? 假设我们写的代码会调用 REST API 或者 Thrift API 的服务。为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。运行在物理硬件上的传统应用中,服...

银月光海
2016/07/27
40
0

没有更多内容

加载失败,请刷新页面

加载更多

微信公众号爬虫项目

项目地址:https://github.com/Chyroc/WechatSogou 项目介绍:基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫 项目截图: 欢迎关注我的公众号:【编程资源库】 ,关注...

编程资源库
9分钟前
3
0
网络安全-->浅谈HTTPS协议

简介 HTTPS,安全的HTTP,也被称为HTTP over TLS,TLS的前身是SSL。HTTPS的安全基础是SSL。SSL协议位于TCP/IP协议与各种应用层协议之间, 为数据通讯提供安全支持。 SSL协议: SS...

qrainly
10分钟前
3
0
信必优成功案例–海尔优家健康

项目背景 •海尔U+健康是海尔优家旗的健康管理功能模块应用。 •终端用户可以通过蓝牙连接多种设备,汇总自身健康数据,并获得图形化的健康状态跟踪和数据分析服务。 •同时,云端会根据用户...

symbiochina88
12分钟前
1
0
思维导图软件TheBrain零基础教程:如何创建新的“想法”

TheBrain,您的终极数字记忆和无限思维导图软件。我们从一个想法跳到另一个想法,构建越来越复杂的网络,直到新想法形成。TheBrain允许你以同样的方式组织你的信息,而不限制你预先确定的文件...

mnrssj
13分钟前
1
0
小程序自定义actionSheet组件

在微信小程序中,针对操作菜单的需求,官方文档提供了相应的api,如下图所示。 但是小程序自带的操作菜单没有 “标题” 这么一个参数,不能在操作菜单的顶部显示自定义的标题,因为这么一个需...

林梓阳
15分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部