停止向经纪人发送消息

时间:2013-09-18 08:58:51

标签: activemq producer-consumer

在我的场景中,我有一个boroker,一个制作人,一个消费者。我正在使用activemq来编写我的应用程序。记录到db.As你知道写入日志到db是时间进行过程。这就是为什么消费者比生产者更慢的原因。我发送100.000消息(巨大的对象).Producer在20分钟内完成发送消息。但是当生产者完成时,消费者已经完成了4.000消息处理。

我的问题是;有没有办法说procuder“等待,如果在经纪人中有x条消息等待消费并尝试在一段时间后发送”

怎样才能解决这个问题。

2 个答案:

答案 0 :(得分:1)

monitor ActiveMQ有几种方式。

例如,您可以使用Advisory-Messages。 有一些指标可供选择,如

ActiveMQ.Advisory.SlowConsumer.Queue
ActiveMQ.Advisory.FastProducer.Topic

要准确查找每个JMX的队列大小,请阅读 http://activemq.apache.org/how-do-i-find-the-size-of-a-queue.html

并尝试举例类似于我的代码段:

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://<server>:<port>/jmxrmi");
JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
...
try
{
  jmxConnector.connect();
  MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
...
  BrokerViewMBean brokerBean = MBeanServerInvocationHandler.newProxyInstance(connection, brokerBeanName, BrokerViewMBean.class, true);
  System.out.println("Total message count:" + brokerBean.getTotalMessageCount());
...
}
...

如果您监控QueueSize / TotalMessageCount,您可以对此做出反应。

答案 1 :(得分:1)

使用像ActiveMQ这样的中间件的想法是随着时间的推移分离消息的生产和消费。例如,如果消费系统关闭,您的生产者不应该关心 - 它关心的是消息进入队列。一旦ActiveMQ将在稍后的时间点传递这些消息。

如果您在消费消息方面遇到问题,那么收到消费者数量或加快消息处理速度会更好。