在我的场景中,我有一个boroker,一个制作人,一个消费者。我正在使用activemq来编写我的应用程序。记录到db.As你知道写入日志到db是时间进行过程。这就是为什么消费者比生产者更慢的原因。我发送100.000消息(巨大的对象).Producer在20分钟内完成发送消息。但是当生产者完成时,消费者已经完成了4.000消息处理。
我的问题是;有没有办法说procuder“等待,如果在经纪人中有x条消息等待消费并尝试在一段时间后发送”
怎样才能解决这个问题。
答案 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将在稍后的时间点传递这些消息。
如果您在消费消息方面遇到问题,那么收到消费者数量或加快消息处理速度会更好。