基于spring集成的转换器使用来自一个系统的消息,检查、转换并将其发送到另一个系统。
如果目标系统关闭,我们将停止入站适配器,但也希望在本地保留或转发当前“正在运行”的转换消息。为此,只需将消息从正常输出通道动态地重新路由到某个“备份”通道。
在文档中,我只找到了根据消息头路由消息的选项(因此,在流程之前的某个步骤中,一旦targer系统不可用,我将不得不动态添加这些消息),或者基于有效负载类型,这不是我真正的情况。动态添加一些标头,然后在管道中过滤掉它,或者在反/序列化期间,对我来说似乎仍然不是最好的方法。我更希望能够打开一个开关(在某些内部事件上),然后将这些“飞行中”的消息重新路由到“备份”通道。
什么是实现这一目标的最佳SI方法?谢谢!
路由器不仅可以基于有效负载类型或某些标头。您确实可以调用一个通用的POJO方法来返回一个通道、它的名称或一些映射的路由密钥。该POJO方法确实可以检查一些内部系统状态并生成这个或那个路由密钥。
所以,你可能在路由器配置中有这样的东西:
.route(myRouter())
其中您的myRouter是这样的:
@Bean
MyRouter myRouter() {
return;
}
它的内部代码可能是这样的:
public class MyRouter {
@Autowired
private SystemState systemState;
String route(Object payload) {
return this.systemState.isActive() ? "successChannel" : "backupChannel";
}
}
同样可以通过简单的lambda定义实现:
.<Object, Boolean>route(p -> systemState().isActive(),
m -> m.channelMapping(true, "sucessChannel")
.channelMapping(false, "backupChannel"))
也...
private final AtomicBoolean switcher = new AtomicBoolean();
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from(() -> "foo", e -> e.poller(Pollers.fixedDelay(Duration.ofSeconds(5))))
.route(s -> switcher.get() ? "foo" : "bar")
.get();
}
我有一个Spring集成流项目,它公开了一个Rest网关,在接收到Rest POST请求后,它会执行一些较小的逻辑。基于一些有效载荷参数,我想动态激活另一个Spring集成流,并将消息路由到该流中的指定通道,我可以在基于有效载荷的主流中发现该通道。子流将把响应消息放在主流中定义的指定通道中。 我如何才能实现这一点。
可以在运行时向spring integration dsl注册MessageSources吗? 在我的例子中,我想创建多个FileReadingMessageSources(基于UI的输入),然后将有效负载发送到特定的通道/jms路由(从元数据或用户输入读取) 另一个问题是,是否可以动态注册IntegrationFlows?
本文向大家介绍spring boot实现profiles动态切换的示例,包括了spring boot实现profiles动态切换的示例的使用技巧和注意事项,需要的朋友参考一下 具体做法: 1、首先在pom中添加profiles: dev指开发模式,prod指生产模式,如需其他模式,只需要添加profile即可. 2、在pom.xml的build中添加plugin: 该配置用来在打包的时候修改配置文
当我向主题“Test19”发送任何消息时,配置的ServiceActivator“ProcessMessage”方法将两条消息显示为配置的两个客户,但这里的问题是,在添加到消费者上下文之前,我需要为每个客户加载入站配置文件…否则,我只能在控制台中得到一条消息…是正确的方式还是我需要在这里改变什么? 谢了。
null 如何在transform()步骤中添加Jaxb2Marshaller?
我想在2个不同的场景之间切换: 问题是当我从场景2切换到场景1时,场景1中加载的所有图像都不在那里(这很明显,因为我正在创建一个新场景,而不是“加载”场景1。 当我从场景2切换到场景1时,有什么方法可以保留已经加载的图像吗? 场景1