ActiveMQ桥接以及负载分担

来源:互联网 发布:查看nginx安装目录 编辑:程序博客网 时间:2024/05/16 09:36
ctiveMQ可以实现多个mq之间进行路由,假设有两个mq,分别为brokerA和brokerB,当有一条消息发送到brokerA的队列test中,有一个客户端连接到brokerB上,并且要求获取test队列的消息时,brokerA中队列test的消息就会路由到brokerB上,反之brokerB的消息也会路由到brokerA。

如果只通过brokerB来消费消息,可以实现桥接。

如果通过brokerA或brokerB来消费消息,则可实现负载分担。

配置的关键点在于:

[html] view plain copy
  1. <networkConnectors>  
  2.             <networkConnector uri="static:(tcp://localhost:61616)" duplex="true"/>  
  3.  </networkConnectors>  

ActiveMQ已经做的很好了,在Conf的目录下有现成的配置文件

activemq-static-network-broker1.xml

主要信息摘录:

[html] view plain copy
  1. <networkConnectors>  
  2.  </networkConnectors>  

[html] view plain copy
  1. <transportConnectors>  
  2.             <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>  
  3.         </transportConnectors>  


activemq-static-network-broker2.xml

主要信息摘录:

[html] view plain copy
  1. <networkConnectors>  
  2.             <networkConnector uri="static:(tcp://localhost:61616)" duplex="true"/>  
  3.         </networkConnectors>  

[html] view plain copy
  1. <transportConnectors>  
  2.            <transportConnector name="openwire" uri="tcp://0.0.0.0:61618"/>  
  3.        </transportConnectors>  


我们需要做的就是将ActiveMQ复制1份,单独放置到另外的文件夹中,这样我们就有了2份activemq啦。

分别将第一份中的activemq-static-network-broker1.xml 改名为activemq.xml     第二份中的activemq-static-network-broker2.xml改名为activemq.xml

分别启动2个activemq,日志输出分别如下

[plain] view plain copy
  1. INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi  
  2. INFO | ActiveMQ 5.5.0 JMS Message Broker (static-broker1) is starting  
  3. INFO | For help or more information please see: http://activemq.apache.org/  
  4. INFO | Listening for connections at: tcp://SONGJIE:61616  
  5. INFO | Connector openwire Started  
  6. INFO | ActiveMQ JMS Message Broker (static-broker1, ID:SONGJIE-60899-1369726682642-0:1) started  
  7. INFO | Connector vm://static-broker1 Started  
  8. INFO | Started responder end of duplex bridge NC@ID:SONGJIE-60962-1369726697807-0:1  
  9. INFO | Network connection between vm://static-broker1#0 and tcp:///127.0.0.1:60965(static-broker1) has been established.  

[plain] view plain copy
  1.  INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1100/jmxrmi  
  2.  INFO | KahaDB is version 3  
  3.  INFO | Recovering from the journal ...  
  4.  INFO | Recovery replayed 2 operations from the journal in 0.019 seconds.  
  5.  INFO | ActiveMQ 5.5.0 JMS Message Broker (static-broker1) is starting  
  6.  INFO | For help or more information please see: http://activemq.apache.org/  
  7.  INFO | Listening for connections at: tcp://SONGJIE:61618  
  8.  INFO | Connector openwire Started  
  9.  INFO | Establishing network connection from vm://static-broker1?async=false&network=true to tcp://localhost:61616  
  10.  INFO | Connector vm://static-broker1 Started  
  11.  INFO | Network Connector DiscoveryNetworkConnector:NC:BrokerService[static-broker1] Started  
  12.  INFO | ActiveMQ JMS Message Broker (static-broker1, ID:SONGJIE-60962-1369726697807-0:1) started  
  13.  INFO | Network connection between vm://static-broker1#0 and tcp://localhost/127.0.0.1:61616(static-broker1) has been established.  

可见启动成功了。

需要验证一下

一个生产者,生产到broker1,端口为61616,每3秒生产一个消息,总计生产20个。

2个消费着,一个消费者到broker1的61616消费消息,另外一个消费者到broker2的61618端口消费消息。

按照顺序启动生产者、第一消费者、第二消费者,在启动第二消费者的时候需要等第一消费者开始消费的时候再进行启动,以便验证消息被第一消费者消费之后,是否会被第二消费者重复消费。

第一消费者日志,前10个日志略掉。

[plain] view plain copy
  1. 11  
  2. 2013-5-28 15:39:40  
  3. ActiveMQObjectMessage {commandId = 21, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:13, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:13, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726783382, arrival = 0, brokerInTime = 1369726786422, brokerOutTime = 1369726786422, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@f4d6b3, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  4. ###ActiveMQObjectMessage {commandId = 21, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:13, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:13, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726783382, arrival = 0, brokerInTime = 1369726786422, brokerOutTime = 1369726786422, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@f4d6b3, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  5. org.apache.activemq.command.ActiveMQObjectMessage  
  6. 12  
  7. 2013-5-28 15:39:43  
  8. ActiveMQObjectMessage {commandId = 22, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:14, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:14, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726786421, arrival = 0, brokerInTime = 1369726789439, brokerOutTime = 1369726789440, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@85f3d6, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  9. ###ActiveMQObjectMessage {commandId = 22, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:14, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:14, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726786421, arrival = 0, brokerInTime = 1369726789439, brokerOutTime = 1369726789440, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@85f3d6, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  10. org.apache.activemq.command.ActiveMQObjectMessage  
  11. 13  
  12. 2013-5-28 15:39:46  
  13. ActiveMQObjectMessage {commandId = 23, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:15, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:15, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726789438, arrival = 0, brokerInTime = 1369726792472, brokerOutTime = 1369726792473, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@17af435, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  14. ###ActiveMQObjectMessage {commandId = 23, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:15, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:15, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726789438, arrival = 0, brokerInTime = 1369726792472, brokerOutTime = 1369726792473, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@17af435, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  15. org.apache.activemq.command.ActiveMQObjectMessage  
  16. 14  
  17. 2013-5-28 15:39:49  
  18. ActiveMQObjectMessage {commandId = 24, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:16, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:16, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726792470, arrival = 0, brokerInTime = 1369726795504, brokerOutTime = 1369726795504, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@136e10e, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  19. ###ActiveMQObjectMessage {commandId = 24, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:16, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:16, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726792470, arrival = 0, brokerInTime = 1369726795504, brokerOutTime = 1369726795504, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@136e10e, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  20. org.apache.activemq.command.ActiveMQObjectMessage  
  21. 15  
  22. 2013-5-28 15:39:52  
  23. ActiveMQObjectMessage {commandId = 26, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:17, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:17, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726795507, arrival = 0, brokerInTime = 1369726798539, brokerOutTime = 1369726798539, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@17490ad, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  24. ###ActiveMQObjectMessage {commandId = 26, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:17, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:17, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726795507, arrival = 0, brokerInTime = 1369726798539, brokerOutTime = 1369726798539, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@17490ad, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  25. org.apache.activemq.command.ActiveMQObjectMessage  
  26. 16  
  27. 2013-5-28 15:39:55  
  28. ActiveMQObjectMessage {commandId = 27, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:19, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:19, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726801569, arrival = 0, brokerInTime = 1369726804601, brokerOutTime = 1369726804601, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@1c68b20, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  29. ###ActiveMQObjectMessage {commandId = 27, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:19, originalDestination = null, originalTransactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:19, producerId = ID:SONGJIE-60899-1369726682642-2:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = null, expiration = 0, timestamp = 1369726801569, arrival = 0, brokerInTime = 1369726804601, brokerOutTime = 1369726804601, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@1c68b20, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  30. org.apache.activemq.command.ActiveMQObjectMessage  
  31. 18  
  32. 2013-5-28 15:40:01  


第二消费者日志
[plain] view plain copy
  1. ActiveMQMessageConsumer { value=ID:SONGJIE-61352-1369726797634-0:1:1:1, started=true }  
  2. ActiveMQObjectMessage {commandId = 57, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:18, originalDestination = null, originalTransactionId = null, producerId = ID:SONGJIE-61158-1369726746561-0:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:18, expiration = 0, timestamp = 1369726798538, arrival = 0, brokerInTime = 1369726798538, brokerOutTime = 1369726801568, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@b2771, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  3. ###ActiveMQObjectMessage {commandId = 57, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:18, originalDestination = null, originalTransactionId = null, producerId = ID:SONGJIE-61158-1369726746561-0:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:18, expiration = 0, timestamp = 1369726798538, arrival = 0, brokerInTime = 1369726798538, brokerOutTime = 1369726801568, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@b2771, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  4. org.apache.activemq.command.ActiveMQObjectMessage  
  5. 17  
  6. 2013-5-28 15:39:58  
  7. ActiveMQObjectMessage {commandId = 63, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:20, originalDestination = null, originalTransactionId = null, producerId = ID:SONGJIE-61158-1369726746561-0:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:20, expiration = 0, timestamp = 1369726804599, arrival = 0, brokerInTime = 1369726804599, brokerOutTime = 1369726807634, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@131ebb3, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  8. ###ActiveMQObjectMessage {commandId = 63, responseRequired = false, messageId = ID:SONGJIE-61158-1369726746561-0:1:1:1:20, originalDestination = null, originalTransactionId = null, producerId = ID:SONGJIE-61158-1369726746561-0:1:1:1, destination = queue://TOOL.DEFAULT, transactionId = TX:ID:SONGJIE-61158-1369726746561-0:1:20, expiration = 0, timestamp = 1369726804599, arrival = 0, brokerInTime = 1369726804599, brokerOutTime = 1369726807634, correlationId = null, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@131ebb3, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false}  
  9. org.apache.activemq.command.ActiveMQObjectMessage  
  10. 19  
  11. 2013-5-28 15:40:04  

可以看到第二消费者只消费了序号为17和19的消息,其余消息都被第一消费者消费啦。


http://blog.csdn.net/jaysuper/article/details/8985118

0 0