使用Spring Integration将域对象路由到适当的方法

时间:2015-09-13 10:35:30

标签: java spring spring-integration

我最近因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方法,那将是多么美妙的事情。有谁知道这是可能的,还是对多渠道方法有任何意见?

1 个答案:

答案 0 :(得分:0)

似乎您的请求类型是特定于应用功能的。这表明您有一个队列可用于所有可能的应用程序功能。这是一个可怕的想法。每个功能至少应该有一个单独的队列。

我建议您重新考虑应用的设计。