当前位置: 首页 > 知识库问答 >
问题:

Jms在swing应用程序中发送消息时的最佳实践?

翁鸿远
2023-03-14

在我的JavaSwing应用程序中,我实现了一个与jms服务器通信的jms客户机。这很好。

当前,当我的应用程序启动时,我创建连接和会话:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

接下来,当我需要向主题发送消息时,我创建了一个主题(发送消息)、一个临时队列(接收回复)、一个生产者(发送消息)和一个消费者(实际读取回复):

Destination destination = session.createTopic ...
MessageProducer producer = session.createProducer ...
Destination tempDest = session.createTemporaryQueue(); 
MessageConsumer responseConsumer = session.createConsumer(tempDest);
producer.send(msg);

我想知道在这种情况下最好的做法是什么?

当我需要发送消息时,我可以简单地创建所有内容吗?或者最好将目标、消息生产者、消息消费者保存在某个地方并重新使用它。当我决定重新使用这些对象时,有什么特别需要注意的吗?

共有1个答案

耿炎彬
2023-03-14

您应该重用您能够重用的对象。

该连接可能会为您的整个应用程序重新使用,因为它是线程安全的。

会话对象不是线程安全的,在这种情况下,您应该坚持每个线程一个会话。

你可以作弊。使用<code>org.apache.activemq.pool。PooledConnectionFactory,它将设置会话、连接和生产者池。

您仍然需要编写<code>connection.createSession(…),但这只是从池中获取和释放对象。

如果您对并发性有细粒度的控制,实际上重用您的对象可能会更容易,但这种情况很少发生。

 类似资料:
  • 我不确定我遇到的问题是概念问题还是技术问题,因为配置错误。 目标是在应用程序容器中托管的Java EE应用程序(特别是WildFly)和独立运行的Java SE应用程序之间发送双向消息,都使用标准JMS协议和主题。我认为这应该是可能的,只要他们都使用相同的经纪人和相同的主题。 因此,我有一个外部 Artemis 实例作为消息代理运行,并在 Java EE 应用程序的单独 Bean 中成功设置了生产

  • 我想使用SpringBoot向ActiveMQ队列发送消息。应用程序应在发送后终止,但仍保持活动状态。 这是我的申请代码: 在没有任何父节点的情况下使用以下依赖项(Maven): 和一行

  • 我有一个监控服务,它在应用程序启动、应用程序关闭和每分钟(滴答)向RabbitMQ发送消息。 启动和勾选事件工作正常。最初编写类时,关闭事件也起作用。 我正在使用spring-boot-starter-amqp 1.3.3。释放 该事件是在DisposableBean接口的destroy方法上触发的。 我也尝试过实现

  • 是否可以在不打开应用程序的情况下发送whatsApp消息,在后台发送,就像使用以下方式发送短信: 如果是,怎么做?我尝试的代码打开了应用程序(意图): 或者是否可以打开应用程序,发送消息到给定的地址,然后关闭它? 谢谢!

  • 我正在spring boot中编写RESTAPI-s。我想确保我的代码对于使用swagger API开发工具(swagger)的前端开发人员是可读的。例如 如果请求成功,响应是一个分支对象,如果失败,响应是只有一个属性(消息)的FindError对象。因此,这两种方法的执行取决于响应。但是swagger UI没有显示响应应该如何显示,因为我使用了“?”作为泛型类型。这是捕捉错误的最佳实践吗?(这种

  • null 谁能给我一个向RabbitMQ发送消息的标准程序的例子。我正在使用Spring Boot,也可以使用它的特性。