当前位置: 首页>数据库>正文

springboot 连接rocketmq集群 springboot consul集群

consul集群安装

springboot写了几个项目,leader说服务可以试着向consul上边迁移,于是搭建了consul的测试集群,至于为什么不用eureka,可以看下边这个表

Feature

Consul

zookeeper

etcd

euerka

服务健康检查

服务状态,内存,硬盘等

(弱)长连接,keepalive

连接心跳

可配支持

多数据中心

支持




kv存储服务

支持

支持

支持


一致性

raft

paxos

raft


cap

ca

cp

cp

ap

使用接口(多语言能力)

支持http和dns

客户端

http/grpc

http(sidecar)

watch支持

全量/支持long polling

支持

支持 long polling

支持 long polling/大部分增量

自身监控

metrics


metrics

metrics

安全

acl /https

acl

https支持(弱)


spring cloud集成

已支持

已支持

已支持

已支持

首先要下载consul的安装包,这是官网的地址https://www.consul.io/,选择一个合适的版本下载安装;安装包中只有一个consul文件,将consul文件拷贝到PATH路径中mv consul /usr/local/bin/consul即可,执行source /etc/profile后就可以利用consul version 查看是否安装成功,如果现实版本号则表明安装成功。同一个集群内的其他的consul也是同样的步骤。在合适的路径下建立data文件夹,用来存放注册的服务的信息,比如我创建的目录是/tmp/consul/data。进入目录后就可以执行创建集群的命令,这里创建了3个consul的server,满足稳定集群的最小需要

consul agent -server -bootstrap -bind=0.0.0.0 -client=IP1 -data-dir=data -ui -node=s1
consul agent -server -bind=0.0.0.0 -client=IP2 -data-dir=data -ui -node=s2  -join IP1
consul agent -server -bind=0.0.0.0 -client=IP3 -data-dir=data -ui -node=s3  -join IP1

注意一个集群中的server只能有一个-bootstrap启动,多个的时候会报错,如果安装客户端需要执行下边的命令:
consul agent -bind=0.0.0.0  -client=IP4 -data-dir=data -node=c1  -join IP1
所有集群的成员安装完成后可以使用consul members -http-addr=IP1:8500查看成员的情况,成员退出使用consul leave -http-addr=IP1:8500命令,相关参数的解释可以看这个链接:http://www.liangxiansen.cn/2017/04/06/consul/
 

consul服务注册与发现

注册的服务使用的是springboot搭建的,发现使用的是springboot+Feign的方式。

服务端需要引入的jar包如下:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-actuator</artifactId>
			<version>1.4.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-context</artifactId>
			<version>1.1.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
			<version>1.2.1.RELEASE</version>
		</dependency>

发现服务的一些关键项需要在配置文件中进行配置:

#默认情况下,consul服务的ID在多台服务器的情形spring.application.name是相同的,
#为注册统一服务不同的服务器需要修改不同的服务器名称不一样
spring.application.name=servicehst + ${random.uuid}
#连接的consul server ip
spring.cloud.consul.host=IP1
#连接的consul server 的端口号
spring.cloud.consul.port=8500
spring.cloud.consul.enabled=true
spring.cloud.
spring.cloud.consul.discovery.enabled=true
#服务的名字
spring.cloud.consul.discovery.serviceName=serviceName
#服务的ID,在配置的时候不需要配置这一项,在多台服务器,多次部署的情况下会导致服务注册只有一个
#spring.cloud.consul.discovery.instanceId=serviceId
spring.cloud.consul.discovery.prefer-ip-address=true

在Springboot的主类上添加@EnableDiscoveryClient后,你在controller类中写所有的方法都可以作为API对外提供服务器,这是测试的controller:

@RestController
public class ConsulController {

    @RequestMapping(path = "/name",method = RequestMethod.GET)
    public String  test(){
        return "服务端-测试consul可用性";
    }
    @RequestMapping(path = "/diffname",method = RequestMethod.GET)
    public String  diff(){
        return "服务端-不同名服务名称的测试!";
    }

    @RequestMapping(path = "/param",method = RequestMethod.GET)
    public String  param(@RequestParam(value = "param") Integer param){
        return "服务端-测试参数"+param;
    }
}

客户端调用的使用的是Feign,需要添加的jar如下:

<!-- Feign实现声明式HTTP客户端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-consul-discovery</artifactId>
		</dependency>

配置文件如下:

#服务的IP和服务的端口号,剩下的自己发现
spring.cloud.consul.host=IP1
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.register=false
#注册服务的有多台服务器,当其中一台挂掉之后,会自动做负载到服务正常的IP上

需要写一个接口

//注明服务端服务的名称,这种调用就是注册的服务,感觉上更像是httpclient通过接口,通过URL的方式进行注册的
@FeignClient("serviceName")
public interface FeinClient {

    /**
     * value的值就是服务端定义的接口的名字
     * method也是服务端定义的方法请求的类型
     * String test1()这个方法名称的名字无所谓
     * @return
     */
    @RequestMapping(method = RequestMethod.GET, value = "/name")
    String test1();


    @RequestMapping(method = RequestMethod.GET, value = "/diffname")
    String diffname();


    @RequestMapping(method = RequestMethod.GET,value="/param")
    String paramname(@RequestParam(value = "param") Integer param);
}

客户端中业务方法调用这里边的接口即可

说明在测试的过程中,主动挂掉consul集群中的某台server服务依旧如常,挂掉某一个注册在consul的服务,服务也可以正常进行


https://www.xamrdz.com/database/6aa1942181.html

相关文章: