Skip to main content
 首页 » 编程设计

c#之如何获取队列 Apache.NMS 中的消费者数量

2024年01月13日30虾米哥

我使用 ActiveMQ 通过 C# 应用发送和接收消息。我的队列名称是 “到服务器”。如何统计消费者?谢谢。

var factory = new NMSConnectionFactory("activemq:tcp://" + _address + ":" +  
_port); 
_connection = factory.CreateConnection(); 
_connection.Start(); 
_session = _connection.CreateSession(AcknowledgementMode.AutoAcknowledge); 
var destenation = SessionUtil.GetDestination(_session, "ToServer"); 
_messageProducer = _session.CreateProducer(destenation); 

请您参考如下方法:

JMS 消息传递和一般大多数消息传递都涉及解耦资源,发送者不知道接收者,反之亦然。计算代码中的接收者数量通常意味着您做错了什么。如果你必须的话,虽然有一些方法,但在 .NET 和 Java 中的方法更有限,因为你不能使用 JMX。代理允许使用 StatisticsBrokerPlugin,它允许您向特定队列上的代理发送控制消息,并获得有关代理中发生的各种事情的统计信息的回复。文档是 here .

您的代码类似于以下 Java 示例。

Queue replyTo = session.createTemporaryQueue(); 
MessageConsumer consumer = session.createConsumer(replyTo); 
 
Queue testQueue = session.createQueue("TEST.FOO"); 
MessageProducer producer = session.createProducer(null); 
 
String queueName = "ActiveMQ.Statistics.Destination." + testQueue.getQueueName() 
Queue query = session.createQueue(queueName); 
 
Message msg = session.createMessage(); 
 
producer.send(testQueue, msg)  
msg.setJMSReplyTo(replyTo); 
producer.send(query, msg); 
MapMessage reply = (MapMessage) consumer.receive(); 
assertNotNull(reply); 
assertTrue(reply.getMapNames().hasMoreElements()); 
 
for (Enumeration e = reply.getMapNames();e.hasMoreElements();) { 
    String name = e.nextElement().toString(); 
    System.err.println(name + "=" + reply.getObject(name)); 
}