我在 DSL 中创建了 IntegrationFlow:
dates= df['Origin_Depart_Date'].values
pid = df['Personnel_ID'].values
ogn = df['Origin'].values
dst = df['Destination'].values
m = (dates[:, None] <= (dates+pd.Timedelta(1, 'd'))) & (dates[:, None] >= dates) & (pid[:, None] == pid) & (ogn[:, None] == dst)
在 wireTap 的选择器中,我尝试过滤消息有效负载是 Exception 的实例。
还有一个 Flow 来处理通知服务。
Personnel_ID
但是好像不行。我可以得到有效载荷不是异常实例的消息。
之前有人遇到过这个问题吗?还是我做错了什么?
非常感谢。
答案 0 :(得分:0)
效果很好:
@SpringBootApplication
public class So66813194Application {
public static void main(String[] args) {
SpringApplication.run(So66813194Application.class, args);
}
@Bean
IntegrationFlow flow() {
return IntegrationFlows
.from("yieldCurveConversionResultChannel")
.wireTap(notificationChannel(), wt -> wt.selector(m -> (m.getPayload() instanceof Throwable)))
.get();
}
@Bean
MessageChannel notificationChannel() {
return new DirectChannel();
}
@Bean
IntegrationFlow notification() {
return IntegrationFlows
.from(notificationChannel())
.handle(System.out::println)
.get();
}
}
@SpringBootTest
class So66813194ApplicationTests {
@Autowired
MessageChannel yieldCurveConversionResultChannel;
@Test
void contextLoads() {
this.yieldCurveConversionResultChannel.send(new GenericMessage<>("foo"));
this.yieldCurveConversionResultChannel.send(new GenericMessage<>(new RuntimeException()));
}
}
我在控制台中只看到这个:
2021-03-26 09:36:25.367 INFO 15164 --- [ main] o.s.i.s.s.So66813194ApplicationTests : Started So66813194ApplicationTests in 1.229 seconds (JVM running for 2.365)
GenericMessage [payload=java.lang.RuntimeException, headers={id=85633b3f-7a17-6b70-8a34-9cbc5aacbf5b, timestamp=1616765785796}]
2021-03-26 09:36:25.810 INFO 15164 --- [extShutdownHook] o.s.i.endpoint.EventDrivenConsumer : Removing {bridge} as a subscriber to the 'yieldCurveConversionResultChannel' channel
因此,来自我的测试的 foo
消息确实被选择器拒绝了。
也许您的问题是某些进程直接向此 notificationChannel
发送消息 - 而不是通过提到的 WireTap
...