我的消息来自我的项目。我需要保留消息并在弹出通道中发布消息,以便订阅者接收消息并进行处理。
然后,发布者将HTTP OK发回给发件人。
订阅者需要使用某些业务逻辑处理消息,并在出现异常/错误时重试最多3次。
我可以使用哪种弹簧集成模式?
我正在考虑使用PublishSubscribeChannel,发布者将消息发送到订阅者频道,订阅者接收消息,发布者需要向发送者返回OK。不确定这是否正确。
我也在尝试使用spring注释,你能给我一些关于我可以使用注释的链接吗?
答案 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。
请告诉我们,如果这适合您,我完全了解您。