Docker-Swarm-下-NATS-集群的构建与使用
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"); }
Docker视频教程学习地址:http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Boot 中使用 RabbitMQ
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 AMQP,即Advanced message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 常用概念 通常我们谈到队列服务, 会有三个概念: 发消息者、队列、收消息者,Rabbi...
- 下一篇
从权限到shiro框架
权限管理 在说具体的框架之前,先把必要的理论知识简单的和大家交代一下。 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 用户身份认证 身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。 用户名密码身份认证流程 关键对象 上边的流程图中需要理解以下关键对象: ν Subject:主体 访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体; ν Principal:身份信息 是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装Nodejs环境