上个周末被我玩过去了,罪过罪过,现在又是一个工作日过去啦,居然有些烦躁,估计这几天看的东西有点杂,晚上坐下来把自己首要工作任务总结总结。上篇学习博客讲了ActiveMQ的特性及安装部署,下面先把我以前启动AMQ遇到的问题写出来。
data lock问题:
这个是因为aqm所在文件data\kahadb文件夹下的lock文件缘故,可以删掉,再运行就可以了。
端口被占用问题:打开服务,找到Internet Connection Sharing (ICS),是ICS占用了端口使得ActiveMQ无法启动。
--------------------------以前的问题讲完,切入正题-----------------------------
关于Topic模式和Queue模式的发送和接收
首先是点对点模式:
生产者和消费者都在线的就不测试了。开启生产消息端,在没有消费端在线时发送一条消息到Activemq,
消费端上线,接收到消息
当存在两个相同的消费者时,使用点对点模式发送一条消息会怎么样?下面一个是用winform写的消费者,一个是控制台的消费者,两者设置的客户端ID不同,监听的是同一个Queue名。winform先启动,控制台程序后启动。如下图:
接下来用生产者发送一条消息。
看结果
看来两个相同的消费者监听一个Queue名,先连接上的会接收到,而这个消息只能发送给一方。
然而,我把那个接受到消息的winform程序关闭,会怎样?
结果:,把winform程序关闭后,那个刚才没接受到消息的控制台程序可以接受消息了。
再把winform程序打开,两个消费者又同时在线,会怎样?
结果:
结论:当使用Queue模式发送消息时,某一个监听该Queue名的消费者A上线后会与之建立一个MessageQueue,相当于两人直接建立了一个专用通道,一对一单独辅导,之后的消费者B再来监听只能在该消费者之后排队啦,等A走了,B就成了专属客户,这时候A又来了,也是排队等在B后面,等B走了才轮到A。
----分割-----
下面是广播模式发送:
做两个消费者,都订阅了生产者的消息,而且都不在线,生产者发送一条消息之后,两个消费者上线会怎么样?
看两个消费者情况:,两个上线都接收到了。
之后我又做了一个订阅者在线一个不在线,两个都在线等,都是可以接收到消息,相当于邮箱,只要订阅了,发布的消息都能接收到,不管你在不在线,看起来比较自由。
-----------------再一个分割线--------------
生产者和消费者可以使用不同的传输协议来传输消息,ActiveMQ提供了广泛的连接模式,包括HTTP/S、JGroups、JXTA、muticast、SSL、TCP、UDP、XMPP等。
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
可以看出最大连接数是1000,最大容量是100m,多种协议连接我试了下没弄出来,可能我哪里弄错了,路过的大牛们指点下吧^_^ 还有传输的内容问题,可以支持多种格式,有待尝试后总结出来。
还测试了下发送的消息存储位置问题,是存在内存里吗?我发送了几万条数据内存没有变化。可能原因是消息量过少,看不出来。。。
下面就开始写ActiveMQ的持久化存储模式和拦截器过滤器的使用问题。