深入浅出 JMS(三) - ActiveMQ 消息传输
深入浅出 JMS(三) - ActiveMQ 消息传输
一、消息协商器(Message Broker)
broke:消息的交换器,就是对消息进行管理的容器。ActiveMQ 可以创建多个 Broker,客户端与 ActiveMQ 交互,实际上都是与 ActiveMQ 中的 Broker 交互,Broker 配置在 ${MQ_HOME}/conf/activemq.xml。

二、连接器(Connectors)
(一)传输连接器(transportConnectors)
transportConnectors 连接器:就是建立broker与消息生产者、消息消费者之间的交互。
传输连接器常用的协议:
在 ActiveMQ 中常用的连接协议:tcp、udp、nio、ssl、http、https、vm。如果使用 ssl 协议需要配置证书,使用 http 或者 https 需要使用httpclient 来发送接收消息。
(1)TCP 默认的协议
使用 TCP 协议的好处:
- 高效的:该协议连接使用了 OpenWire 协议,通过把消息转换成字节流,性能非常好
- 可用性:TCP 是使用非常广泛的网络协议,基本上所有的平台都支持
TCP 连接的 URI 形式:tcp://hostname:port?key=value&key=value,后面的参数选填
TCP 配置示例 conf/activemq.xml:
<transportConnectors>
<!--activemq 的默认连接 tcp-->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
(2)NIO
NIO 协议和 TCP 协议类似,但 NIO 更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的 client 调用和服务端有更多的负载。
适合使用 NIO 协议的场景:
- 可能有大量的 Client 去链接到 Broker 上。一般情况下,大量的 Client 去连接 Broker 是被操作系统的线程数所限制的。因此, NIO 的实现比 TCP 需要更少的线程去运行,所以建议使用 NIO 协议。
- 可能对于 Broker 有一个很迟钝的网络传输。NIO 比 TCP 提供更好的性能。
NIO 连接的 URI 形式:nio://hostname:port?key=value,后面的参数选填。
NIO 配置实例 conf/activemq.xml:
<transportConnectors>
<!-- 设置一个NIO的连接-->
<transportConnector name="nio" uri="nio://0.0.0.0:61617"/>
</transportConnectors>
(3)UDP
UDP 和 TCP 的区别
- TCP 是一个原始流的传递协议,意味着数据包是有保证的,换句话说,数据包是不会被复制和丢失的。UDP,它是不会保证数据包的传递的可靠性。
- TCP 是被用在稳定可靠的场景中使用的;UDP 通常用在快速数据传递和不怕数据丢失的场景中,还有 ActiveMQ 通过防火墙时,只能用 UDP。
UDP 连接的 URI 形式:udp://hostname:port?key=value
配置实例 conf/activemq.xml:
<transportConnectors>
<transportConnector name="udp" uri="udp://localhost:61618"/>
</transportConnectors>
(4)、SSL
底层是 TCP 协议,但是对传输数据进行了加密。
适用场景:MQ 暴露在外网,要求客户端与 broker 之间通讯
SSL 的连接的 URI 形式:ssl://hostname:port?key=value
配置实例 conf/activemq.xml:
<transportConnectors>
<transportConnector name="ssl" uri="ssl://localhost:61619"/>
</transportConnectors>
使用步骤:
创建 SSL 协议:
配置 Broker SSL 协议 conf/activemq.xml:
<sslContext>
<sslContext keyStore="F:/beifeng/apache-activemq-5.6.0/conf/mybroker.ks"
keyStorePassword="test123" />
</sslContext>
配置客户端 SSL 协议:

(5)HTTP、HTTPS
通过 jetty 容器来接收 http 协议的 mq 消息。
用于只允许基本 HTTP 服务通过的网络环境。
通过 httpclient 来发送/接收消息,需要添加额外的 java 包 Httpclient、Xstream、activemq-optional。
HTTP、HTTPS 的连接的 URI 形式:URI:http://hostname:port?key=value。
配置实例conf/activemq.xml:
<transportConnectors>
<transportConnector name="http" uri="http://localhost:8080"/>
</transportConnectors>
配置 HTTPS 则需要在 jetty.xml 中配置相关证书 HTTPS=HTTP + SSL
(二)网络连接器(NetWorkConnectors)
NetWorkConnectors:用于 Broke 与 Broke 之间的交互 ,主要是 ActiveMq 集群部署时。
每天用心记录一点点。内容也许不重要,但习惯很重要!
深入浅出 JMS(三) - ActiveMQ 消息传输的更多相关文章
- 深入浅出 JMS(三) - ActiveMQ 安全机制
深入浅出 JMS(三) - ActiveMQ 安全机制 一.认证 认证(Authentication):验证某个实体或者用户是否有权限访问受保护资源. MQ 提供两种插件用于权限认证: (一).Sim ...
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
- 深入浅出 JMS(四) - ActiveMQ 消息存储
深入浅出 JMS(四) - ActiveMQ 消息存储 一.消息的存储方式 ActiveMQ 支持 JMS 规范中的持久化消息与非持久化消息 持久化消息通常用于不管是否消费者在线,它们都会保证消息会被 ...
- 深入浅出 JMS(二) - ActiveMQ 入门指南
深入浅出 JMS(二) - ActiveMQ 入门指南 上篇博文深入浅出 JMS(一) – JMS 基本概念,我们介绍了消息通信的规范JMS,这篇博文介绍一款开源的 JMS 具体实现-- Active ...
- 深入浅出JMS(二)--ActiveMQ简单介绍以及安装
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
- JMS学习三(ActiveMQ消息的可靠性)
下面我们来学习一下消息接受确认和发送持久化消息.消息的过期.消息的选择器和消息的优先级. 一.消息接收确认 1.jms消息只有在被确认之后才认为成功消费了这条消息.消息的成功消费通常包括三个步骤:(1 ...
- 2015年12月10日 spring初级知识讲解(三)Spring消息之activeMQ消息队列
基础 JMS消息 一.下载ActiveMQ并安装 地址:http://activemq.apache.org/ 最新版本:5.13.0 下载完后解压缩到本地硬盘中,解压目录中activemq-core ...
- JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中
JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...
随机推荐
- openssl - cookbook
1.openssl 2.Testing 3.Best Practices last 1.openssl 1.1.Key and Cerificate Management Run a web serv ...
- Flutter,最好的跨平台开发框架
今天说说使用flutter的一些体会 对于Flutter,从发现到接触再到使用,不知不觉,已经有大半年了!在这段时间里,谷歌几乎每天都会更新Flutter,有时甚至一天更新几次,这让我对它更加充满信心 ...
- UVA-839-二叉树-一个有意思的题目
题意: 一颗二叉树可以看成一个杠杆,左右俩边有重量,有到支点长度,判断整个树是否平衡(根据杠杆原理),如果当前结点有左孩子,那么当前左边的重量就是左孩子的总和,右边同理 递归,发现scanf和cin的 ...
- 关于有些邮件可以在http上发送成功但是https不能发送成功一个思路方法
关于有些邮件可以在http上发送成功但是https不能发送成功 其实如果是单纯的发送邮件,是没问题 今天一个客户出现这个问题,进行排查 他的邮件发送是任务制的, 是通过CURL请求的, 我估计她的CU ...
- js选择器 querySelector
<form method="post" action="" id="myform"> <input type=" ...
- spring coud feign
1. 依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- ArrayList 原理(2)
1. 概述 关于Java集合的小抄中是这样描述的: 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预 ...
- Data Guard 介绍
- Cachefiled
NFS不同共享客户端间的数据不同步 问题现象 当您用台ECS挂载同一个NFS文件系统,在ECS-A上append写文件,在ECS-B用tail -f观察文件内容的变化.在ECS-A写完之后,在ECS- ...
- 迷你MVVM框架 avalonjs 学习教程19、avalon历史回顾
avalon最早发布于2012.09.15,当时还只是mass Framework的一个模块,当时为了解决视图与JS代码的分耦,参考knockout开发出来. 它的依赖收集机制,视图扫描,绑定的命名d ...