前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker-Swarm-下-NATS-集群的构建与使用

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

作者头像
二哥聊运营工具
发布2021-12-17 09:30:39
9580
发布2021-12-17 09:30:39
举报
文章被收录于专栏:程序员泥瓦匠
NATS 是一个开源的、轻量级的、高性能的分布式消息通信系统,实现了高可伸缩性和优雅的发布/订阅模型。 NATS 适合云基础设施的消息通信系统、物联网设备消息通信和微服务架构。

❤️ 环境准备

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

  • docker 版本:17-09
  • nats 版本:1.0.4

❤️ Nats 集群架构设计

❤️ 搭建集群

1、【Manager】创建集群网络

代码语言:javascript
复制
docker network create -d overlay --attachable mongo

--attachable 允许其他容器加入此网络

2、创建 Nats 集群

2.1、【Manager】创建 stack.yml

代码语言:javascript
复制
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】启动集群

代码语言:javascript
复制
docker stack deploy -c stack.yml nats

2.3、【Manager】查看服务的启动情况

代码语言:javascript
复制
docker service ls

3、连接集群

  • 外部【用于测试】:查看端口随机的端口映射(netstat -ntlp),一般为 30000~30002,连接时指定多个URL:
代码语言:javascript
复制
nats://managerIP:30000
nats://managerIP:30001
nats://managerIP:30002
  • 内部【限 nats 网络下的服务或容器】:
代码语言:javascript
复制
nats://nats1:4222
nats://nats2:4222
nats://nats3:4222

❤️ 在 Spring Boot 中连接 Nats 集群

1、 添加 Maven 依赖

代码语言:javascript
复制
<!-- 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

代码语言:javascript
复制
@ConfigurationProperties(prefix = "spring.nats")
@Data
public class NatsProperties {

    private String[] urls;

}

3、Nats 自动配置类 NatsAutoConfiguration.java

代码语言:javascript
复制
@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 配置示例

代码语言:javascript
复制
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 订阅发布消息

代码语言:javascript
复制
@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");
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员泥瓦匠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ❤️ 环境准备
  • ❤️ Nats 集群架构设计
  • ❤️ 搭建集群
  • ❤️ 在 Spring Boot 中连接 Nats 集群
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档