某些消息在 activemq + spring 启动时多次传递
Some messages are delivered multiple times on activemq + spring boot
对于我的应用程序(Spring boot + ActiveMq),如果我在应用程序内部使用 jms 消息,它只消耗一次当它涉及到另一个应用程序到这个应用程序时它消耗 7 次,当查看日志说明redelivercount 逐一增加,最多增加了 7 倍。
是配置问题还是其他问题?
2017 年 1 月 12 日 20:34:14,473 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:15,624 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5, responseRequired = true, messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 1 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:16,667 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 2 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:17,725 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5, responseRequired = true, messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 3 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:18,884 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 4 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:19,934 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 5 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:20,976 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 6 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
@Component
public class Consumer {
@JmsListener(destination = "soapCall")
public String receiveQueue(ActiveMQMapMessage activeMQMapMessage) throws Exception {
try {
LOGGER.info("ActiveMQMapMessage ::: " + activeMQMapMessage);
LOGGER.info("activeMQMapMessage.getJMSCorrelationID() :: " + activeMQMapMessage.getJMSCorrelationID());
LOGGER.info("activeMQMapMessage.getContentMap() :: " + activeMQMapMessage.getContentMap());
String Id = activeMQMapMessage.getString("Id");
return Id;
} catch (Exception e) {
LOGGER.info(e.getMessage(), e);
throw e;
}
}
}
Producer.java
@Component
public class MakeEcall {
private static final Logger LOGGER = LogManager.getRootLogger();
@Autowired
JmsTemplate jmsTemplate;
public void send(ActiveMQMapMessage activeMQMapMessage) throws Exception {
this.jmsTemplate.convertAndSend("soapCall", activeMQMapMessage );
LOGGER.info("Call triggered Successfully.... Posted into JMSQueue for this " + activeMQMapMessage.getString("Id"));
}
}
如文档中所说
Annotated methods may have a non-void return type. When they do, the result of the method invocation is sent as a JMS reply to the destination defined by the JMSReplyTO header of the incoming message.
正如我在您的日志中看到的那样,replyTo = null 所以您的问题是 return 类型不是无效的。
对于我的应用程序(Spring boot + ActiveMq),如果我在应用程序内部使用 jms 消息,它只消耗一次当它涉及到另一个应用程序到这个应用程序时它消耗 7 次,当查看日志说明redelivercount 逐一增加,最多增加了 7 倍。
是配置问题还是其他问题?
2017 年 1 月 12 日 20:34:14,473 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:15,624 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5, responseRequired = true, messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 1 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:16,667 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 2 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:17,725 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5, responseRequired = true, messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 3 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:18,884 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 4 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:19,934 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 5 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
2017 年 1 月 12 日 20:34:20,976 [7553] [DefaultMessageListenerContainer-1] 信息 com.xerago.rsa.jms.Consumer 21 {} - ActiveMQMapMessage :: ActiveMQMapMessage {commandId = 5,responseRequired = true,messageId = ID:DWTECH031-44805-1484233018540-1:2:1:1:1,originalDestination = null,originalTransactionId = null,producerId = ID:DWTECH031-44805-1484233018540-1:2:1:1,destination = queue ://soapCall, transactionId = null, expiration = 0, timestamp = 1484233454452, arrival = 0, brokerInTime = 1484233454452, brokerOutTime = 1484233454453, correlationId = Hai, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = org.apache.activemq.util.ByteSequence@6ef648b, marshalledProperties = null, dataStructure = null, redeliveryCounter = 6 , size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false} ActiveMQMapMessage{ theTable = {QuoteId=FHM166963} }
@Component
public class Consumer {
@JmsListener(destination = "soapCall")
public String receiveQueue(ActiveMQMapMessage activeMQMapMessage) throws Exception {
try {
LOGGER.info("ActiveMQMapMessage ::: " + activeMQMapMessage);
LOGGER.info("activeMQMapMessage.getJMSCorrelationID() :: " + activeMQMapMessage.getJMSCorrelationID());
LOGGER.info("activeMQMapMessage.getContentMap() :: " + activeMQMapMessage.getContentMap());
String Id = activeMQMapMessage.getString("Id");
return Id;
} catch (Exception e) {
LOGGER.info(e.getMessage(), e);
throw e;
}
}
}
Producer.java
@Component
public class MakeEcall {
private static final Logger LOGGER = LogManager.getRootLogger();
@Autowired
JmsTemplate jmsTemplate;
public void send(ActiveMQMapMessage activeMQMapMessage) throws Exception {
this.jmsTemplate.convertAndSend("soapCall", activeMQMapMessage );
LOGGER.info("Call triggered Successfully.... Posted into JMSQueue for this " + activeMQMapMessage.getString("Id"));
}
}
如文档中所说
Annotated methods may have a non-void return type. When they do, the result of the method invocation is sent as a JMS reply to the destination defined by the JMSReplyTO header of the incoming message.
正如我在您的日志中看到的那样,replyTo = null 所以您的问题是 return 类型不是无效的。