spring - Spring Cloud Function - 不同消费者的单独路由表达式
问题描述
我有一个服务,它从不同的消息队列接收不同的结构化消息。让@StreamListener conditions
我们可以在每种消息类型中选择应该如何处理该消息。举个例子:
我们收到两种不同类型的消息,它们具有不同的标头字段和值,例如
从“订单”队列传入:
Order1: { Header: {catalog:groceries} }
Order2: { Header: {catalog:tools} }
从“装运”队列传入:
Shipment1: { Header: {region:Europe} }
Shipment2: { Header: {region:America} }
每个队列都有一个绑定,据此@StreamListener
我可以按目录和区域不同地处理消息
例如
@StreamListener(target = OrderSink.ORDER_CHANNEL, condition = "headers['catalog'] == 'groceries'")
public void onGroceriesOrder(GroceryOder order){
...
}
所以问题是,如何使用新的 Spring Cloud Function 方法来实现这一点?
Also, for SpEL, the root object of the evaluation context is Message so you can do evaluation on individual headers (or message) as well ….routing-expression=headers['type']
是否可以将路由表达式添加到绑定中,例如 (in application.yml
)
onGroceriesOrder-in-0:
destination: order
routing-expression: "headers['catalog']==groceries"
?
第一次回答后编辑 如果在这个位置上面的表达式是不可能的,第一个答案意味着什么,我的问题如下:
据我了解,routing-expression: headers['catalog']
必须全局设置类似的表达式,因为结果映射到某些(消费者)函数。
我如何控制每个队列上的 2 条不同消息将被转发到它们自己的消费者函数,例如
Order1 --> MyOrderService.onGroceriesOrder()
Order2 --> MyOrderService.onToolsOrder()
Shipment1 --> MyShipmentService.onEuropeShipment()
Shipment2 --> MyShipmentService.onAmericaShipment()
使用 很容易@StreamListener
,因为每个方法都有自己的@StreamListener
注释,具有不同的条件。新设置如何实现这一点routing-expression
??
解决方案
除了上面不是一个有效的表达这一事实之外,但我认为你的意思是headers['catalog']==groceries
. 如果是这样,您希望从评估它作为唯一的两个选项会发生什么可能是真/假。无论如何,这些都是修辞,但有助于理解问题以及如何解决问题。
表达式必须产生一个函数值才能路由到 TO。所以。. .
routing-expression: headers['catalog']
- 假设catalog
header 的实际值是要调用的函数的名称
routing-expression: headers['catalog']==groceries ? 'processGroceries' : 'processOther'
- 将值 'groceries' 映射到 'processGroceries' 函数。
推荐阅读
- python - 如何让神经进化的输出只有二进制数?
- bash - 将“bc”外部工具转换为函数
- iis - 找不到localtest.me的服务器IP地址
- python - 用 numpy 创建大向量
- python - Kubernetes Python Client Watch 停止返回结果,不会失败
- c# - 处理 post 请求正文中的枚举
- javascript - 在子目录中为 React 应用程序(+Router)配置 .htaccess
- video - 有没有办法防止在 HTML5 视频播放器中下载视频
- c++ - 从 cin 读取的进程上的 HUP 信号
- c++ - 为什么我的 3-Partitioning 问题无法通过给定的测试用例?(3-分区问题)