微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ActiveMQ CMS:有没有办法在没有线程的情况下使用它?

如何解决ActiveMQ CMS:有没有办法在没有线程的情况下使用它?

我从 Apache 获取示例代码https://activemq.apache.org/components/cms/example

(特别是生产者部分)并尝试重写它,因此它不会创建任何生产线程。相反,在我的程序的主线程中,创建一个生产者对象并设置连接、会话、目的地等。然后它使用消息生产者发送消息。这一切都是在单例中完成的,因此我的程序只有一个 Producer 对象,并且在需要将任何消息转储到我的队列之一时才转到它。这个示例代码似乎为每个线程创建了一个生产者,每次都设置它,只是为了发送消息,然后删除所有内容。每次你想从你的程序中产生一些东西时,它都会这样做。

当我尝试使用任何给定消息调用消息生产者的发送时,我就崩溃了。经过一番挖掘,我发现在发送调用之后,它会尝试锁定互斥锁并进入临界区。我猜这是为了线程?我在我的代码中根本不使用线程,所以我猜它会因此而崩溃......有没有人知道绕过这个的方法?我不想使用多个线程,我不需要担心两个线程试图同时调用 send 或者使用互斥体试图解决的任何问题。

解决方法

您不需要创建线程来运行生产者,但在内部库将使用几个线程,因为这是满足 API 要求所必需的,而且仅仅因为您不使用多线程't 意味着其他人不会,所以互斥锁是内部要求。

您可以随意修改示例以仅在应用程序的主线程内创建一个生产者,该示例使用两个线程,因为它既充当生产者又充当消费者。

您收到错误的一个可能原因是您没有初始化 ActiveMQ-CPP 库:

activemq::library::ActiveMQCPP::initializeLibrary();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。