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;
您可以使用客户端确认模式。该消息将一直保留到您决定使其消失为止。
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 发送方和接收方代码