服务端消息框架

消息规范

JMS:Java Message Service,Java消息服务,是基于JVM消息代理的规范。
AMQP:Advanced Message Queuing Protocol,高级消息队列协议,也是一个消息代理的规范,它不仅兼容JMS,还支持跨语言和平台。2004年,摩根大通和iMatrix开始着手AMQP开放标准的开发。2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。RabbitMQ采用Erlang语言开发。
AMQP与JMS不同,JMS定义了一个API和一组行为,而AMQP是一个线路级协议。线路级协议描述的是通过网络发送的数据传输格式,任何符合该数据格式的消息发送和接收工具都能互相兼容和进行操作,这样能实现跨技术平台的架构方案。
MQTT:物联网(Internet of Things,IoT)机器之间(Machine-to-Machine,M2M)的大规模沟通中使用传统的HTTP请求/回答(Request/Response)模式不再合适,取而代之的是发布/订阅(Publish/Subscribe)模式。这就是轻量级、可扩展的MQTT,即Message Queuing Telemetry Transport,消息队列遥测传输,是IBM开发的一个即时信息传输通讯协议,是一个客户端服务端架构的发布/订阅模式的基于TCP/IP的基于二进制的消息传输协议。在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等,MQTT如今已经成为OASIS规范。MQTT规范很简单,非常适合需要低功耗和网络带宽有限的IoT场景。
TCP/IP参考模型可以分为四层:应用层、传输层、网络层、链路层。TCP和UDP位于传输层,应用层常见的协议有HTTP、FTP、SSH等。MQTT协议运行于TCP之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT。

异步消息

异步消息中有两个很重要的概念,即消息代理(message broker)和目的地(destination),消息发送者发送消息之后,消息将由消息代理接管,再由消息代理负责保证消息传递到指定目的地。
目的地形式有两种:队列(queue)和主题(topic)。队列用于点对点(point-to-point)形式的消息通信,主题用于发布订阅式(publish/subscribe)的消息通信。队列中的消息一次取出即逝,主题形式的消息可以做到多次使用。

消息框架

ActiveMQ: Apache出品,是最流行的,能力强劲的开源消息总线,是一个队列项目,支持MQTT、AMQP等协议。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经很久了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

kafka同RabbitMQ,ActiveMQ等是分布式消息队列,或者叫分布式消息中间件,或者叫做一种MQ产品(Message Queue)。kafka不支持MQTT协议。

事件驱动框架

事件驱动框架的优势是耦合度很低、系统扩展性好,而且生产者无需关心消费者。事件驱动框架可理解为观察者模式的升级,而观察者模式是固定调用关系的解耦。

参考:
管中窥豹:一线工程师看MQTT,协议详解 http://blog.csdn.net/tangxiaoyin/article/details/76053348
MQTT-Node.js实现-Mosca简介
http://www.jianshu.com/p/8315acec4e6b
MQTT入门篇
https://zhuanlan.zhihu.com/p/20888181
物联网核心协议—消息推送技术演进
http://www.cnblogs.com/Free-Thinker/p/5559798.html
物联网MQTT协议分析和开源Mosquitto部署验证 mosquitto_sub -t topic_name
http://www.cnblogs.com/Free-Thinker/p/5559816.html
MQTT协议笔记之消息流
http://www.blogjava.net/yongboy/archive/2014/02/15/409893.html
MQTT协议通俗讲解
http://blog.csdn.net/u011216417/article/details/69666752

centos6.9下mosquitto搭建

1.下载libwebsockets和mosquitto
libwebsockets下载页面:https://github.com/warmcat/libwebsockets/releases
mosquitto下载页面:https://github.com/eclipse/mosquitto/releases
2.安装依赖
yum -y install gcc gcc-c++ openssl-devel c-ares-devel libuuid-devel wget cmake xmlto
3.增加websocket支持
cd /home
tar -zxvf libwebsockets-2.4.1.tar.gz
cd libwebsockets-2.4.1
mkdir bulid
cd bulid
cmake ..
make && make install
sudo ldconfig #If you’ve installed libwebsockets with make install then you probably just need to run sudo ldconfig to update the linker cache。
4.安装mosquitto
cd /home
tar -zxvf mosquitto-1.4.14.tar.gz
#添加websocket支持
修改config.mk文件以使后面编译的mosquitto文件支持websocket
cd mosquitto-1.4.14
找到mosquitto-1.4.14目录下的config.mk文件,把config.mk文件中的WITH_WEBSOCKETS:=no改为yes,如下:
# Build with websockets support on the broker.
WITH_WEBSOCKETS:=yes
#安装
make && make install
#如果安装过报错如下:
warning: failed to load external entity “/usr/share/xml/docbook/stylesheet/docbook-xsl/manpages/docbook.xsl”
compilation error: file manpage.xsl line 3 element import
xsl:import : unable to load /usr/share/xml/docbook/stylesheet/docbook-xsl/manpages/docbook.xsl
compilation error: file mosquitto.8.xml line 4 element refentry
xsltParseStylesheetProcess : document is not a stylesheet
make[1]: *** [mosquitto.8] Error 5
make[1]: Leaving directory `/home/mosquitto-1.4.14/man’
make: *** [docs] Error 2
,则修改/home/mosquitto-1.4.14/man/manpage.xsl中

修改为:
重新执行:make && make install
#如果执行程序时找不到libwebsockets的库文件,执行下面的命令为库做一下符号连接:
ln -s /usr/local/lib/libwebsockets.so.6 /usr/lib64/libwebsockets.so.6
#其它操作
groupadd mosquitto
useradd -g mosquitto mosquitto
#创建mosquitto.conf、pwfile文件
cd /etc/mosquitto/
cp mosquitto.conf.example mosquitto.conf
cp pwfile.example pwfile
cp aclfile.example aclfile
#mosquitto.conf修改配置如下,注意去掉每行前面的tab空白:


	# =================================================================
	# General configuration
	# =================================================================
	# 服务进程的PID
	pid_file /var/run/mosquitto.pid
	# 服务端口号
	port 1883
	# websockets端口号
	listener 9090
	# 添加websockets协议支持
	protocol websockets
	# 最大连接数,-1表示不限制
	max_connections -1
	# 服务进程的系统用户
	user mosquitto

	# =================================================================
	# Security
	# =================================================================
	# 不允许匿名用户
	allow_anonymous false
	# 用户/密码文件,默认格式:username:password
	password_file /etc/mosquitto/pwfile
	# 配置用户访问控制
	acl_file /etc/mosquitto/aclfile

	# =================================================================
	#Persistence configuration
	# =================================================================
	# 消息自动保存的间隔时间:默认30分钟往磁盘写一次,0表示mosquitto关闭才写到磁盘中
	autosave_interval 1800
	# 消息自动保存功能的开关
	autosave_on_changes false
	# 持久化功能的开关
	persistence true
	# 持久化DB文件
	persistence_file mosquitto.db
	# 持久化DB文件目录
	persistence_location /usr/mosquitto/

	# =================================================================
	# Logging
	# =================================================================
	# 4种日志模式:stdout、stderr、syslog、topic
	# 日志路径:none 则表示不记日志,此配置可以提升些许性能
	log_dest file /usr/mosquitto/mosquitto.log
	# 选择日志的级别(可设置多项)
	log_type error
	# 是否记录客户端连接信息
	#connection_messages true
	# 是否记录日志时间
	#log_timestamp true

#创建用户及密码,此处用户名是hthl_pub
mosquitto_passwd -c /etc/mosquitto/pwfile hthl_pub
输入命令后,控制台会提示输入新建用户的密码,连续输入两次密码后,则会生成一个pwfile文件。
注意:mosquitto_passwd -c 每次都只会生成只包含一个用户的文件,如果想在passwd.conf中存放多个用户, 可以使用mosquitto_passwd -b 命令:
mosquitto_passwd -b [最终生成的password_file文件] [用户名] [密码]
mosquitto_passwd -b /etc/mosquitto/pwfile hthl_sub 123456
mosquitto_passwd -D 命令删除一个用户
mosquitto_passwd -D [最终生成的password_file文件] [用户名]
#aclfile修改配置如下:

	#This only affects clients with username "hthl_pub".
	user hthl_pub
	topic write hthl/#
	# This only affects clients with username "hthl_sub".
	user hthl_sub
	topic read hthl/#

#创建存储目录
mkdir /usr/mosquitto
chown -R mosquitto /usr/mosquitto

5.启动 mqtt
mosquitto -c /etc/mosquitto/mosquitto.conf -d
6.推送测试
mosquitto_pub -h 127.0.0.1 -t topic1 -u hthl_pub -P 123456 -m “你好,世界!”

参考
http://www.voidcn.com/article/p-fjphobex-brk.html

mosquitto centos安装配置


http://www.cnblogs.com/littleatp/p/4835879.html

命令行发布测试:
mosquitto_pub -h localhost -t topic1 -u username1 -P password1 -m “你好,世界!”
命令行订阅测试:
mosquitto_sub -t topic1 -u username1 -P password1

发表评论