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

JMS模板,如何使用JMS模板从一个队列接收消息并发送到另一个队列

公羊喜
2023-03-14
public void sendSimpleMessage(String receiver, String sender) {
    try {
        Message message = jmsTemplate.receive(receiver);
        System.out.println(message.getIntProperty("OlQuestionId"));
        jmsTemplate.send(sender, new MessageCreator() {

            @Override
            public Message createMessage(Session session) throws JMSException {
                throw new JMSException("Exception"+message.getIntProperty("OlQuestionId"));
            }
        });
    } catch (JmsException jmsException) {
        System.out.println(jmsException);
    } catch (JMSException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

如果在发送接收到的消息时发生异常,则会丢失已接收到的消息。

@Bean
public JmsTemplate jmsTemplate() throws JMSException {
    JmsTemplate template = new JmsTemplate();
    template.setConnectionFactory(connectionFactory());
    //template.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    template.setSessionTransacted(true);
    template.setDeliveryMode(2);
    return template;

共有1个答案

韶景曜
2023-03-14

您可以使用客户端确认模式。该消息将一直保留到您决定使其消失为止。

message.acknowledge();

请参阅如何使用JmsTemplate进行手动确认并从Rabbitmq队列中删除消息

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

  • 我有一个由第三方发布的JMS队列。我想在不同的机器上设置多个使用者,只有一台特定机器的使用者确认该队列上的消息。简而言之,如果特定机器的使用者没有接收到消息,那么该消息不应从队列中删除。这是可以实现的吗?

  • 问题内容: 有一条消息(文本),我肯定知道其格式和内容。 目前,已经实现了Java类,该类从文件中解析并读取此消息。 在现实世界中,此消息将来自消息队列。 现在,我应该在本地PC上模拟,模拟或生成Message Queue,以进行测试。 Java规范(java jms ): 关于此规范,我需要 JMS provider 。 JMS客户端 -这是我的类,它读取消息。 消息 本身,我知道。 那么问题是

  • 我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。

  • 因此,我使用Spring integration链接JMS和ActiveMQ,如下所示:- 如何使其工作,以便发送到此队列并从中接收消息?请帮忙。

  • 我正在使用JMS模板和Spring Boot同步发送/接收JMS队列调用。我查看了JMS模板的正式spring文档,但没有任何帮助。 我不太确定具体调用receive()方法,否则一旦调用send(),它就会自动接收消息。因为这是同步调用,所以我只需要接收我发送的消息(带有相关Id)。 下面是我的spring boot代码。 JMSSConfig.java 发送方和接收方代码