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

一图胜千言

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了。

调用效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taP54u3X-1583983168768)(https://oscimg.oschina.net/oscnet/40da40059a5fe025997fad92236b870286b.jpg “consul注册中心调用效果”)]

源代码

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

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值