之后,我尝试从其他应用程序使用者那里使用该消息。这没有问题。
我的应用程序使用者是用Spring Boot构建的,如下所示:
@SpringBootApplication
public class ProcessorClaimsApplication {
public static void main(String[] args) {
SpringApplication.run(ProcessorClaimsApplication.class, args);
}
}
@EnableJms
@Configuration
public class ProcessorClaimsConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(ProcessorClaimsConfig.class);
private static final String ORDER_ID = "orderId";
private static final String APPROVED = "approved";
private static final String APPROVERS = "approvers";
private static final String APPOVER_INFO_SEPARATOR = ":";
private static final String APPROVERS_SEPARATOR = ";";
@Autowired
private AS2Service as2Service;
@Autowired
private EnsuranceService ensuranceService;
...
@Transactional
@JmsListener(destination = "requests", selector = "JMSType = 'PAYMENTORDERAPPROVALRESPONSE'")
public void processZMessageResponse(MapMessage message) {
try {
LOGGER.debug("Incoming message found JMSCorrelationID {}, orderId {}", message.getJMSCorrelationID(),
message.getStringProperty(ORDER_ID));
boolean approved = (Boolean) message.getObject(APPROVED);
String approvers = (String) message.getObject(APPROVERS);
LOGGER.debug("Sending resolution to Ensurance");
ensuranceService.sendResolution(Long.valueOf(message.getJMSCorrelationID()),
message.getStringProperty(ORDER_ID), approved, approvers);
} catch (Exception e) {
LOGGER.error("The is an error processing the message: {}" + e.getMessage());
e.printStackTrace();
}
}
}
顺便说一句,最初的requests
队列是在应用程序生成器将消息发送到ActiveMQ Artemis时创建的,并使用JMSTemplate
完成,如下所示:
public void pushResolution(String jmsCorrelationID, final String paymentOrderId,
final String paymentOrderNumber, final String paymentOrderType, Map<String, Object> data) {
this.jmsTemplate.send(requestsQueue, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
MapMessage message = session.createMapMessage();
for (String key : data.keySet()) {
message.setObject(key, data.get(key));
}
message.setJMSCorrelationID(jmsCorrelationID);
message.setJMSType(MessageTypeEnum.PAYMENTORDERAPPROVALRESPONSE.name());
message.setStringProperty("orderId", paymentOrderId);
message.setStringProperty("orderNumber", paymentOrderNumber);
message.setStringProperty("orderType", paymentOrderType);
return message;
}
});
LOGGER.debug("Pushed Payment Order Response in Queue successfully.");
}
您所看到的是意料之中的,因为这是ActiveMQ Artemis的默认行为。地址和队列将自动创建和删除。地址和队列是响应客户端发送消息或客户端创建消费者而创建的。一旦队列中没有更多的消息并且最后一个使用者断开连接,队列就会被移除,因为不再需要它。当没有更多的队列绑定到一个地址时,它也会被移除。如有需要,这些资源将再次被重新创建。
您可以通过以下地址设置来控制此行为:
自动创建队列
自动删除队列
自动创建地址
自动删除地址
您可以通过以下地址设置微调行为:
自动删除-队列-延迟
自动删除-队列-消息-计数
自动删除-地址-延迟
有关更多详细信息,请参见文档。
问题内容: 我正在使用一些示例代码,该代码使我可以将消息从Python客户端发送到Android服务器(TCP)。但是,仅在关闭客户端后,该消息才会显示在Android仿真器上。 我可能缺少tcp套接字(首次使用和实现)背后的一些基本知识。 我的主要目的是使Android App中的按钮可以在单击时将不同的消息发送到单独的Linux系统上的Python客户端,并且Python客户端在收到该消息
我在kafka消费者文档中看到了这个注释-
使用.NET rabbitmq客户端(https://www.rabbitmq.com/dotnet.html)。创建了一个库,其他项目可以引用该库在总线上订阅/取消订阅/发布消息。 根据这里和这里提供的信息,为了让每个订户接收所有消息,每个客户端需要为每个订户定义一个不同的队列,绑定到交换机。我遇到的问题是如何在“客户端”应用程序使用队列完成后删除队列(因为这将以指数级增长,而且永远不会被清理掉
我的应用程序使用来自RabbitMQ的一些消息并对其进行处理。我有大约10个队列,每个队列最多有10个消费者(线程)。我有5次预回迁。我正在Heroku中使用CloudAMQP插件(RabbitMQ作为服务)运行安装程序。 我使用默认心跳和连接超时设置(60秒)运行。 我的java应用程序是一个使用sping-Rabbit库的Spring Boot应用程序。 版本: 问题是对于一个特定队列的消费者
我已经实现了一个简单的应用程序来理解spring cloud是如何为客户端配置的。 它只包含两个类:
socket.io 0.9 node.js 0.10.15 速递3.3.4 即:调用 --服务器端 --客户端