我有一个Spring集成流,StompInboundChannelAdapter
监听来自一个目的地的传入消息,另一个集成流,StompMessageHandler
发送消息到不同的目的地。我可以为两者使用相同的StompSessionManager
示例吗?或者每个流都应该有自己的示例?STOMP服务器是相同的。
我尝试了以下配置的单例示例,它似乎可以工作,但我不知道这是正确的方法还是我遗漏了一些东西:
@Configuration
public class StompSessionManagerConfiguration {
@Value("${host}")
private String host;
@Value("${port}")
private Integer port;
@Value("${login}")
private String login;
@Value("${passcode}")
private String passcode;
@Bean
public StompSessionManager stompSessionManager() {
ReactorNettyTcpStompClient stompClient = new ReactorNettyTcpStompClient(host, port);
ReactorNettyTcpStompSessionManager stompSessionManager =
new ReactorNettyTcpStompSessionManager(stompClient);
stompSessionManager.setConnectHeaders(connectHeaders());
return stompSessionManager;
}
public StompHeaders connectHeaders() {
StompHeaders connectHeaders = new StompHeaders();
connectHeaders.setLogin(login);
connectHeaders.setPasscode(passcode);
return connectHeaders;
}
}
@Configuration
public class IncomingMessageFlowConfiguration {
@Autowired
private StompSessionManager stompSessionManager;
@Bean
public IntegrationFlow incomingMessageFlow() {
return IntegrationFlow.from(stompInboundChannelAdapter())
.channel("incomingMessageChannel").get();
}
public StompInboundChannelAdapter stompInboundChannelAdapter() {
StompInboundChannelAdapter adapter =
new StompInboundChannelAdapter(stompSessionManager, "incomingDestination");
adapter.setPayloadType(byte[].class);
return adapter;
}
}
@Configuration
public class OutgoingMessageFlowConfiguration {
@Autowired
private StompSessionManager stompSessionManager;
@Bean
public IntegrationFlow outgoingMessageFlow() {
return IntegrationFlow.from("outgoingMessageChannel")
.handle(stompMessageHandler()).get();
}
public StompMessageHandler stompMessageHandler() {
StompMessageHandler stompMessageHandler = new StompMessageHandler(stompSessionManager);
stompMessageHandler.setDestination("outgoingDestination");
return stompMessageHandler;
}
}
1条答案
按热度按时间pgky5nke1#
是的。您可以在不同的端点之间共享
StompSessionManager
。它的目标是管理连接到STOMP代理的单个客户端会话。我们甚至在共享
StompSessionManager
的项目中有一个集成测试:字符串
查看更多信息在源代码:https://github.com/spring-projects/spring-integration/blob/main/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/client/StompServerIntegrationTests.java