在我的场景中,我有一个boroker,一个生产者,一个消费者。我使用activemq来编写我的应用程序。logs to db.As你知道将日志写入db是一个耗时的过程,这就是为什么消费者比producer.For ex更慢的原因。I send 100.000 message (大型对象).Producer在20 mins.But内完成发送消息当生产者完成时,消费者已经完成了4.000消息的处理。
我的问题是;有没有办法说procuder“如果代理中有x条消息等待消费,并尝试在一段时间后发送”?
怎样才能解决这个问题。
发布于 2013-09-18 19:11:29
有几种方法可以实现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,您可以对此做出反应。
发布于 2013-09-19 16:14:15
使用像ActiveMQ这样的中间件背后的想法是随着时间的推移分离消息的生产和消费。例如,如果消费系统宕机,你的生产者不应该关心--它关心的是消息是否进入了队列。一旦有了这些消息,ActiveMQ将在稍后的时间点发送这些消息。
如果您在足够快的速度使用消息时遇到问题,那么您最好是增加消费者的数量,或者在收到消息后加快消息的处理速度。
https://stackoverflow.com/questions/18867887
复制相似问题