我正在維護一個現有的應用程序,它接收來自ActiveMQ的請求並通過ActiveMQ主題將響應發回給發件人。目前有其通過簡單的使用DefaultMessageListenerContainer接收消息的單個消息的消費階層:基於對象類型的Spring JMS消息切換
@Component
public class RequestConsumer {
@Autowired
CustomerService customerService;
@Autowired
JmsSenderService jmsSenderService;
public void handleMessage(Message message) {
if (message instanceof CustomerRequest) {
CustomerRequest customerRequest = (CustomerRequest) message;
Customer customer = customerService.getCustomerById(customerRequest.getId());
CustomerResponse customerResponse = new CustomerResponse();
customerResponse.addCustomer(customer);
jmsSenderService.sendCustomerResponse(customerResponse);
}
}
}
我需要擴展應用程序來處理多個不同的請求(例如OrderRequest,InvoiceRequest,InventoryRequest,AddressRequest等)和發送適當的回覆給發件人。我的第一個想法是將功能添加到現有類中,如下所示:
public void handleMessage(Message message) {
if (message instanceof CustomerRequest) {
// deal with CustomerRequest
} else if (message instanceof InvoiceRequest) {
// deal with InvoiceRequest
} else if (message instanceof InventoryRequest) {
// deal with InventoryRequest
}
}
但是,這會使類很大。我也考慮過爲每個請求類型實現一個隊列(例如,customer.request.queue,invoice.request.queue)並實現多個DefaultMessageListenerContainer,每個隊列一個,但是這看起來不是一個好主意,要麼是因爲多個樣板類我需要創建。
我覺得必須有一種方法來實現基於傳入對象類型的某種路由並將其映射到特定於對象的實現來處理請求,但我不確定這是否是某種東西/ JMS已經提供。
有沒有人做過這樣的事情,如果有的話,是否有一種「春天」的方式來做到這一點?
謝謝你的指針,看起來像Spring Integration將滿足我的需求。 –