您现在的位置是:首页 > 文章详情

Docker-Swarm-下-NATS-集群的构建与使用

日期:2018-11-29点击:560

NATS 是一个开源的、轻量级的、高性能的分布式消息通信系统,实现了高可伸缩性和优雅的发布/订阅模型。 NATS 适合云基础设施的消息通信系统、物联网设备消息通信和微服务架构


环境准备

 

三台服务器,建立 Docker Swarm 集群,一个 Manager,两个 Worker

  •  docker 版本:17-09

  • nats 版本:1.0.4


Nats 集群架构设计

images/Fz5KpXEPJwCaTYFzf3FEKP6KMm5sBCsw.jpg


搭建集群

 

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;   }

3Nats 自动配置类 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();     }   }

4application.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"); }

Docker视频教程学习地址:http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467


原文链接:https://blog.roncoo.com/article/132395
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章