MQ遥测传输(MQTT)是一种轻量级基于代理的发布/订阅消息传递协议开放设计,简单、重量轻、容易实现。 这些特点使它适合用在受约束的环境,例如,但不限于:
协议的特点包括:
三个消息传递的服务质量:
“最多一次”,负责传递消息的最大努力底层TCP / IP网络。 会发生信息丢失或重复。 这个水平可以被使用,例如,环境传感器数据,它并不重要,如果一个人失去阅读下一个不久将公布。
“至少一次”,确保消息到达,但可能发生重复。
“只有一次”,确保消息到达,完全一次。 这一级别可使用,例如,在计费系统中,消息重复或丢失会导致不正确的结果。
参考:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#qos-flows
JBoss EAP 6的消息系统是通过HornetQ实现,这是一个JBoss的社区项目。后来HornetQ捐献给了Apache ActiveMQ项目,HornetQ社区加入对HornetQ的支持,并创建了新的消息系统Apache ActiveMQ Artemis,这就是JBoss EAP 7所使用的消息系统。Apache ActiveMQ Artemis提供了对JBoss EAP 6的兼容性支持,对HornetQ也提供了协议上的支持。
JMS 2.0系统API组成:
Apache ActiveMQ Artemis核心API
Apache ActiveMQ Artemis内核API中,把JMS Queue和Topic统一包装为一个地址(address),无差别作为核心queue操作,并以"jms.queue"为前缀。对于JMS topic,可以绑定一个或者多个queue到核心queue(Topic的表示)上,这些queue的地址被当做这个Topic的订阅(subscription)。对于JMS Queue,有唯一的queue绑定到该核心queue(Queue的表示),表示这个JMS Queue。
核心API是JMS之外的客户端API,一般可以提供比JMS更丰富的功能。
Apache ActiveMQ Artemis总览
Apache ActiveMQ Artemis已经支持的协议:
Apache ActiveMQ Artemis协议
核心架构
http://activemq.apache.org/artemis/download.html
将artemis解压完成后,在重新建一个文件夹artmisbroker
运行
artemis.cmd create C:\artmisbroker --user mq --password 123
即可在artmisbroker目录下生成所需的文件
运行artemis
"C:\artmisbroker\bin\artemis" run
使用Windows service方式运行artemis
"C:\artmisbroker\bin\artemis-service.exe" install
"C:\artmisbroker\bin\artemis-service.exe" start
停止 windows service:
"C:\artmisbroker\bin\artemis-service.exe" stop
卸载windows service
"C:\artmisbroker\bin\artemis-service.exe" uninstall
访问 http://localhost:8161/console 进入监视界面
修改用户:./artemis user add --user guest --password guest --role mq
cd /var/lib/mybroke
bin: 实例的执行文件脚步
etc: 实例的所有配置文件
artemis.profile 实例环境、端口配置、jvm配置
artemis-roles.properties
artemis-users.properties
bootstrap.xml web启动配置,插件位置,端口
<broker xmlns="http://activemq.org/schema">
<jaas-security domain="activemq"/>
<!-- artemis.URI.instance is parsed from artemis.instance by the CLI startup.
This is to avoid situations where you could have spaces or special characters on this URI -->
<server configuration="file:/var/lib/mybroker/etc//broker.xml"/>
<!-- The web server is only bound to localhost by default -->
<web bind="http://0.0.0.0:8161" path="web">
<app url="activemq-branding" war="activemq-branding.war"/>
<app url="artemis-plugin" war="artemis-plugin.war"/>
<app url="console" war="console.war"/>
</web>
</broker>
broker.xml broker 配置文件,accept,address,plugin
<addresses>
<address name="DLQ">
<anycast>
<queue name="DLQ" />
</anycast>
</address>
<address name="ExpiryQueue">
<anycast>
<queue name="ExpiryQueue" />
</anycast>
</address>
<address name="zhuyunhui">
<anycast>
<queue name="zhuyunhui" />
</anycast>
</address>
</addresses>
jolokia-access.xml
logging.properties
login.config 配置用户角色信息等
management.xml 管理权限,jmx端口等
data: 存储持久化消息数据
log: 存储滚动日志文件
tmp: 存储临时文件,broken运行期间安全的删除
名称 | 社区 | 语言 | 集群 | 备注 |
---|---|---|---|---|
Apache ActiveMq Artemis | 活跃 | java | 支持 | 代码量不大,支持很多其他协议适配jms,控制台功能全,支持plugin |
EMQ | 活跃 | Elang | 支持 | 中国技术公司维护,后台功能全,支持plugin |
Mosquitto | 活跃 | C语言 | 支持 | Eclipse 产品,历史悠久 |
moquette | 活跃 | java | 支持 | 代码量少,适合自定义,使用netty作为通信框架,可能不稳定 |
MQTT Proxy(confluent 提供的一种mqtt网关)
MQTT Proxy provides a scalable and lightweight interface that allows MQTT clients to produce messages to Kafka directly, in a Kafka-native way that avoids redundant replication and increased lag.