如何在队列Apache.NMS中计算消费者数量

时间:2017-04-28 16:53:29

标签: c# apache-nms

我正在使用ActiveMQ使用C#应用程序发送和接收消息。我的队列名称是 “ToServer”。如何计算消费者? THX。

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);

1 个答案:

答案 0 :(得分:-1)

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));
}