我有兩個應用程序運行ActiveMQ代理的任一端;應用1發送同步請求的應用程序2,該返回響應發回應用程序1.Spring集成的併發問題 - 「無法發佈到已刪除的目標」
應用1
@MessagingGateway
public interface OrderGateway {
@Gateway(requestChannel = "requestChannel", replyChannel = "responseChannel")
public OrderDto fetchOrder(OrderRequest orderRequest);
}
@Bean
public IntegrationFlow outgoingRequestFlow(ConnectionFactory connectionFactory) {
return IntegrationFlows.from("requestChannel")
.handle(Jms.outboundGateway(connectionFactory).requestDestination("order.queue"))
.get();
}
應用2
@Bean
public IntegrationFlow incomingRequestFlow(ConnectionFactory connectionFactory) {
return IntegrationFlows.from(Jms.inboundGateway(connectionFactory).destination("order.queue"))
.channel("requestChannel")
.handle("orderServiceActivator", "fetchOrder")
.channel("responseChannel")
.get();
}
@Component
public class OrderServiceActivator {
@Autowired
OrderService orderService;
@ServiceActivator
public OrderDto fetchOrder(OrderRequest orderRequest) {
return orderService.getById(orderRequest.getId());
}
}
這兩個應用程序包含以下代理連接出廠配置:
@Bean(destroyMethod = "stop")
public PooledConnectionFactory activeMQConnectionFactory() {
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
activeMQConnectionFactory.setBrokerURL("tcp://broker.local:61616");
return new PooledConnectionFactory(activeMQConnectionFactory);
}
我在應用程序1 /myapp/order/{id}
中創建了一個REST控制器,它向orderGateway.fetchOrder
提交請求,該請求正常工作。然後我通過在命令行運行while true; do curl http://localhost:8080/myapp/order/1; done
來測試它,並讓它運行幾分鐘,通過應用發送了數百個請求,沒有錯誤,一切都很好。我可以看到,request.queue
正在排隊和出隊消息在ActiveMQ管理工具中,並且ActiveMQ.Advisory.TempQueue
也有很高的排隊/出隊計數。
當有併發請求時會發生問題;如果我打開了兩個終端窗口,並運行在兩個窗口捲曲環,很快我開始看到以下錯誤:
Sep 21, 2015 4:35:25 PM org.springframework.jms.listener.DefaultMessageListenerContainer invokeErrorHandler
WARNING: Execution of JMS message listener failed, and no ErrorHandler has been set.
javax.jms.InvalidDestinationException: Cannot publish to a deleted Destination: temp-queue://ID:Stans-MacBook-Pro.local-64816-1442849675850-1:1:559
是我SI配置錯了嗎?是否需要應用其他一些配置參數?感謝您的任何指導。
感謝您的回覆Gary。我將專注於創建一個指定的答覆目的地,以查看錯誤是否仍然存在。我已經爲此創建了一個單獨的問題,而不是編輯這個問題。 –