转 Docker-Swarm-下-NATS-集群的构建与使用
2019 | 0 | 0
NATS 是一个开源的、轻量级的、高性能的分布式消息通信系统,实现了高可伸缩性和优雅的发布/订阅模型。 NATS 适合云基础设施的消息通信系统、物联网设备消息通信和微服务架构。
环境准备
三台服务器,建立 Docker Swarm 集群,一个 Manager,两个 Worker。
docker 版本:17-09
nats 版本:1.0.4
Nats 集群架构设计
搭建集群
1、【Manager】创建集群网络
docker network create -d overlay --attachable mongo
--attachable 允许其他容器加入此网络
2、创建 Nats 集群
2.1、【Manager】创建 stack.yml
version: '3.3' services: nats1: image: registry.docker-cn.com/library/nats command: --cluster nats://0.0.0.0:5222 -routes nats://nats2:5222,nats://nats3:5222 ports: - 4222 networks: - nats deploy: restart_policy: condition: on-failure placement: constraints: - node.hostname==manager nats2: image: registry.docker-cn.com/library/nats command: --cluster nats://0.0.0.0:5222 -routes nats://nats1:5222,nats://nats3:5222 ports: - 4222 networks: - nats deploy: restart_policy: condition: on-failure placement: constraints: - node.hostname==worker1 nats3: image: registry.docker-cn.com/library/nats command: --cluster nats://0.0.0.0:5222 -routes nats://nats1:5222,nats2:5222 ports: - 4222 networks: - nats deploy: restart_policy: condition: on-failure placement: constraints: - node.hostname==worker2 networks: nats: external: true
2.2、【Manager】启动集群
docker stack deploy -c stack.yml nats
2.3、【Manager】查看服务的启动情况
docker service ls
3、连接集群
外部【用于测试】:查看端口随机的端口映射(netstat -ntlp),一般为 30000~30002,连接时指定多个URL:
nats://managerIP:30000 nats://managerIP:30001 nats://managerIP:30002
内部【限 nats 网络下的服务或容器】:
nats://nats1:4222 nats://nats2:4222 nats://nats3:4222
在 Spring Boot 中连接 Nats 集群
1、 添加 Maven 依赖
<!-- Nats --> <dependency> <groupId>com.github.cloudfoundry-community</groupId> <artifactId>nats-client</artifactId> <version>0.6.7</version> </dependency> <!-- Spring Boot 配置处理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
2、 Nats 属性配置类 NatsProperties.java
@ConfigurationProperties(prefix = "spring.nats") @Data public class NatsProperties { private String[] urls; }
3、Nats 自动配置类 NatsAutoConfiguration.java
@org.springframework.context.annotation.Configuration @EnableConfigurationProperties(NatsProperties.class) @ConditionalOnClass(Nats.class) @Log4j2 public class NatsAutoConfiguration { @Bean @ConditionalOnMissingBean(Nats.class) public Nats nats(NatsProperties natsProperties) { NatsConnector natsConnector = new NatsConnector(); for (String url : natsProperties.getUrls()) { natsConnector.addHost(url); } return natsConnector.connect(); } }
4、application.yml 配置示例
spring: nats: urls: - nats://192.168.99.100:30000 - nats://192.168.99.100:30001 - nats://192.168.99.100:30002
提示:如需在 yml 文件中提示自定义的配置属性,可以新建文件 resources/META-INF/spring.factories,内容如下:org.springframework.boot.autoconfigure.EnableAutoConfiguration=cn.ictgu.config.nats.NatsAutoConfiguration
5、使用 Nats 订阅发布消息
@Autowired private nats.client.Nats nats; ... // 订阅消息 public void subscribe() { nats.subscribe("some.nats.subject", new MessageHandler() { @Override public void onMessage(Message message) { System.out.println("Received: " + message); } }); } // 发布消息 public void send() { nats.subscribe("some.nats.subject", "message content"); }
文章来源:http://mp.weixin.qq.com/s/T3Iu8ltIKhQUObA5MAVGcg
Docker视频教程学习地址:http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467
0
199****9888
7人已关注
领课教育 29751
7933
update 44184
3696
领课教育 16319
husheng 19545
请更新代码 40302
凯哥Java 865
凯哥Java 972
凯哥Java 698