我最近因android design support library而开始研究Spring Integration,并对基于对象类型的路由有疑问。
我维护的应用程序需要处理来自传入的ActiveMQ队列(request.queue)的请求,并将响应发送回主题(response.topic)的调用者。目前,请求的结构如下:
public abstract class Request {
// base class
}
public abstract class CustomerRequest extends Request {
// base class for customer-specific requests
}
public class FindCustomerByIdRequest extends CustomerRequest {
private int id;
}
public class FindAllCustomersRequest extends CustomerRequest {
private boolean includeArchivedCustomers;
}
public class AddCustomerRequest extends CustomerRequest {
private String name;
private Date signupDate;
private Address address;
}
我为每个高级域对象提供服务,该对象提供为这些传入请求提供服务的功能:
@Service
public class CustomerService {
public CustomerResponse findCustomerById(FindCustomerByIdRequest request) {
// code snipped
return customerResponse;
}
public AddCustomerResponse addCustomer(AddCustomerRequest request) {
// code snipped
return addCustomerResponse;
}
}
我需要通过CustomerService
将每个特定请求路由到@ServiceActivator
中的approriate方法,我了解这可以通过为每个请求创建单独的通道并实现PayloadTypeRouter
来实现根据类型在正确的渠道上提出请求。
随着时间的推移,请求类型列表将会增长,我在质疑每个请求的单通道设置是否有效/实用/可扩展。例如,如果将来有100种不同的请求类型,则会有100个不同的渠道。
如果我可以将超类CustomerRequest
的高级请求路由到CustomerService
并让Spring通过注释或其他机制调用approriate方法,那将是多么美妙的事情。有谁知道这是可能的,还是对多渠道方法有任何意见?
答案 0 :(得分:0)
似乎您的请求类型是特定于应用功能的。这表明您有一个队列可用于所有可能的应用程序功能。这是一个可怕的想法。每个功能至少应该有一个单独的队列。
我建议您重新考虑应用的设计。