activemq支持的协议:
client端broker端的通讯协议:
TCP、UDP、NIO、UDP、SSL、HTTP(S)、vm
可以在activemq.xml的配置文件中增加NIO协议进行传输消息的组件.
在<transportConnectors>这个标签当中增加下面这样的协议,注意端口重新定义,不要和已有的重复
<transportConnector name="nio" uri="nio://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
然后在 JmsSender文件当中更改 ConnectoryFactory指定的端口
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("" +
"nio://192.168.159.136:61618?jms.optimizeAcknowledge=true");
另外一段JmsReceiver 当中也更改为这样的端口
重新测试,依然正常传送消息。
项目源代码:https://github.com/q907364606/activemq_and_spring
activemq的持久化存储
a)kahadb
b)AMQ
c)内存
d)levelDB
使用 zookeeper和 activemq进行整合,需要在三台linux上安装 activemq
首先先要将 activemq中的静态网络连接先取消掉。
<!--
<networkConnectors>
<networkConnector uri="static://(tcp://192.168.159.136:61616,tcp://192.168.159.135:61616)" />
</networkConnectors>
-->
然后把消息回流这个也取消掉(注释掉即可)。
<!-- 设置消息回流
<policyEntry queue=">" enableAudit="false" > 设置成false之后它认为消息可以被继续消费
<networkBridgeFilterFactory>
<conditionalNetworkBridgeFilterFactory replayWhenNoConsumers="true"/>
</networkBridgeFilterFactory>
</policyEntry>
-->
在persistenceAdapter标签中配置下面的内容
<replicatedLevelDB directory="${activemq.data }/leveldb"
replicas="3" bind="tcp://0.0.0.0:61615"
zkAddress="192.168.159.136:2181,192.168.159.135:2181,192.168.159.137:2181"
hostname="192.168.159.136"
zkPath="/activemq/leveldb"
/>
zkAddress:zookeeper集群的机器节点 hostname:本地主机的地址 zkPath:在zookeeper当中写入的路径名
directory:levelDB数据文件的存储位置 replicas:(replicas/2)+1 使用这个公式计算出节点必须存在的个数,否则运行就是失败的。 bind:用来同步数据的端口和ip
三台linux的activemq都更改这个配置 hostname不一样
然后先进行zookeeper的集群工作,zookeeper的集群详细见另外一篇博客文章。
https://blog.youkuaiyun.com/baidu_24545901/article/details/79924289
然后启动zookeeper,然后再启动三台 activemq
如果 zookeeper和 activemq集群成功,那么登录任何一台的zookeeper,会出现下面的 zkPath中的路径的zookeeper节点