学习笔记-记ActiveMQ学习摘录与心得(二)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 学习笔记-记ActiveMQ学习摘录与心得(二)

学习笔记-记ActiveMQ学习摘录与心得(二)

 2013/10/30 11:12:48  年年有余  博客园  我要评论(0)
  • 摘要:上个周末被我玩过去了,罪过罪过,现在又是一个工作日过去啦,居然有些烦躁,估计这几天看的东西有点杂,晚上坐下来把自己首要工作任务总结总结。上篇学习博客讲了ActiveMQ的特性及安装部署,下面先把我以前启动AMQ遇到的问题写出来。datalock问题:这个是因为aqm所在文件data\kahadb文件夹下的lock文件缘故,可以删掉,再运行就可以了。端口被占用问题:打开服务,找到InternetConnectionSharing(ICS),是ICS占用了端口使得ActiveMQ无法启动。----
  • 标签:笔记 学习 学习笔记

  上个周末被我玩过去了,罪过罪过,现在又是一个工作日过去啦,居然有些烦躁,估计这几天看的东西有点杂,晚上坐下来把自己首要工作任务总结总结。上篇学习博客讲了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&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>

可以看出最大连接数是1000,最大容量是100m,多种协议连接我试了下没弄出来,可能我哪里弄错了,路过的大牛们指点下吧^_^   还有传输的内容问题,可以支持多种格式,有待尝试后总结出来。

还测试了下发送的消息存储位置问题,是存在内存里吗?我发送了几万条数据内存没有变化。可能原因是消息量过少,看不出来。。。

下面就开始写ActiveMQ的持久化存储模式和拦截器过滤器的使用问题。

发表评论
用户名: 匿名