当前位置: 首页 > 面试题库 >

如何创建一个临时jms队列并按名称连接到它?

锺星洲
2023-03-14
问题内容

我需要为响应创建一个临时队列,但是我需要知道是否可以通过消息的setJMSReplyTo方法发送响应队列对象而不连接到临时队列,因为回复线程根本无法得到该对象。


问题答案:

我通过使用InitialContext对象将临时队列绑定到jndi,以便可以从需要使用临时队列的线程中查找临时队列。

jndiContext = new InitialContext();
connectionFactory = (QueueConnectionFactory) jndiContext.lookup("ConnectionFactory");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
temporaryQueue = session.createTemporaryQueue();       
jndiContext.bind(queueJndiName, temporaryQueue);    
destination = temporaryQueue;
responseConsumer = session.createConsumer(destination);
responseConsumer.setMessageListener(new MyListener());

要获取临时队列,您只需要在需要使用它的代码中查找它:

Context jndiContext = new InitialContext();
queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("ConnectionFactory");
queue = (Queue) jndiContext.lookup(youTemporaryQueueName);


 类似资料:
  • 如果在发送接收到的消息时发生异常,则会丢失已接收到的消息。

  • 我通过命名的JMS队列将JMS请求发送到Weblogic 10.3服务器,并通过临时队列接收回复。 客户(裸体): 服务器MDB(消息驱动bean): 问题是第一个服务器回复经常丢失!也就是说,每4-5个回复都以超时结束。当消费者收到第一个答案时,它将继续收到所有剩余的答案,所以问题只出在临时队列创建后通过临时队列发送的第一条消息上。 我的问题是:我是否必须为临时队列设置一些特殊的设置,以便它在创

  • 我已经配置了位于 NAT 网关后面的 JBoss EAP 7.0。我的 JMS 客户机可以从同一服务器或同一网络的其他服务器成功连接到 JMS 队列,但是当同一个 JMS 客户机移出该网络并尝试通过 NAT 网关连接到 JMS 时,它无法连接到队列。在 VPC 中的开发环境和 AWS EC2 中都会遇到相同的行为。开发环境有一个NAT网关,我假设VPC也使用相同或类似的东西。 我从如何在 JBos

  • 我有两个使用JMS作为传输的CXFendpoint;一个用作消费者,另一个用作生产者。这是一个非常精简的设置。 但是当调用第二个路由时会发生什么,CXF组件或camel会尝试重用来自原始入站消息(包括回复队列)的所有JMS配置,而不是仅为此交换创建另一个临时回复队列。这似乎是从in消息中获取的标头。 如果您只使用纯JMS并将CXF从等式中去掉,那么camel会正确地为路由的内部创建一个新队列,尽管

  • 我在域模式下运行Wildfly17。我们一直在手动添加JMS队列,但我宁愿将配置作为部署脚本的一部分添加。我可以使用创建服务器和数据源,但在队列方面似乎没有任何进展。我希望domain_config.xml的结尾如下所示: 我已经研究了如何在Wildfly中使用CLI设置消息传递子系统,但我得到的都是错误。 domain_config.xml的完整嵌套是:

  • 要求:我们需要从JMS队列(由另一个应用程序发布)中检索一条消息,并将该消息持久保存在我们的JMS队列中。需要整个流是事务性的,所以如果消息不能持久化到下游JMS队列中,则不应该确认从上游JMS队列接收到的消息。我的配置如下 在这种情况下,我需要使用JmsTransactionManager,还是应该高于配置就足够了。我们可以处理重复的消息,所以我相信我们不需要XA事务。