我可以使用哪种弹簧集成模式?

时间:2014-07-13 14:52:04

标签: java spring spring-integration

我的消息来自我的项目。我需要保留消息并在弹出通道中发布消息,以便订阅者接收消息并进行处理。

然后,发布者将HTTP OK发回给发件人。

订阅者需要使用某些业务逻辑处理消息,并在出现异常/错误时重试最多3次。

我可以使用哪种弹簧集成模式?

我正在考虑使用PublishSubscribeChannel,发布者将消息发送到订阅者频道,订阅者接收消息,发布者需要向发送者返回OK。不确定这是否正确。

我也在尝试使用spring注释,你能给我一些关于我可以使用注释的链接吗?

1 个答案:

答案 0 :(得分:2)

您的用例是Spring Integration的典型用例,它完全适用于集成内容。

看起来你应该花更多时间在EIP理论上,因为你不知道该怎么做。

嗯,PublishSubscribeChannel适用于需要向多个订阅者发送相同消息的情况,当然,它也适用于单个订阅者。就JMS而言,它就像topic

我会实现你的用例,如:

<int-http:ibound-gateway path="/foo" request-channel="input"/>

<int:channel id="input"/>

<int:service-activator input-channel="input" ref="myService" method="serviceMethod">
    <int:request-hadnler-advice-chain>
         <beans:bean class="org.springframework.integration.handler.advice.RequestHandlerRetryAdvice"/>
    </int:request-hadnler-advice-chain>
</int:service-activator>

myService应该在业务逻辑之后返回OK字符串。

由于您实现了请求/回复案例(HTTP),因此没有理由保留消息,因为HTTP客户端会立即等待回复,并且您对消息的持久性可能会在将来破坏逻辑中的某些内容。但是,在这种情况下,它也会起作用 - message-store <queue> <channel>上的@Configuration @EnableIntegration @EnableRetry @ComponentScan public class HttpFlowSample { @Bean public MessageChannel input() { return new DirectChannel(); } @Bean public MessagingGatewaySupport httpInboundGateway() { HttpRequestHandlingMessagingGateway gateway = new HttpRequestHandlingMessagingGateway(); RequestMapping mapping = new RequestMapping(); mapping.setPathPatterns("/foo"); gateway.setRequestMapping(mapping); gateway.setRequestChannel(this.input()); return gateway; } @MessageEndpoint public static class MyService { @ServiceActivator(inputChannel = "input") @Retryable public String serviceMethod(Object payload) { //Do business logic return "OK"; } } }

为了使注释相同,它可能如下所示:

{{1}}

注释示例仅适用于Spring Integration 4.0。

请告诉我们,如果这适合您,我完全了解您。