首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止向broker发送消息

停止向broker发送消息
EN

Stack Overflow用户
提问于 2013-09-18 16:58:51
回答 2查看 436关注 0票数 0

在我的场景中,我有一个boroker,一个生产者,一个消费者。我使用activemq来编写我的应用程序。logs to db.As你知道将日志写入db是一个耗时的过程,这就是为什么消费者比producer.For ex更慢的原因。I send 100.000 message (大型对象).Producer在20 mins.But内完成发送消息当生产者完成时,消费者已经完成了4.000消息的处理。

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

怎样才能解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2013-09-18 19:11:29

有几种方法可以实现monitor ActiveMQ

例如,您可以使用Advisory-Messages。有一些可用的指示器,比如

代码语言:javascript
复制
ActiveMQ.Advisory.SlowConsumer.Queue
ActiveMQ.Advisory.FastProducer.Topic

等。

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

例如,尝试类似于我的代码片段的内容:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-09-19 16:14:15

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

如果您在足够快的速度使用消息时遇到问题,那么您最好是增加消费者的数量,或者在收到消息后加快消息的处理速度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18867887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档