gpt4 book ai didi

Spring Cloud 功能 - 不同消费者的单独路由表达式

转载 作者:行者123 更新时间:2023-12-04 11:40:51 25 4
gpt4 key购买 nike

我有一个服务,它从不同的消息队列接收不同的结构化消息。有 @StreamListener conditions我们可以在每种消息类型中选择如何处理该消息。举个例子:

我们收到两种不同类型的消息,它们具有不同的 header 字段和值,例如

来自“订单”队列:

Order1: { Header: {catalog:groceries} }
Order2: { Header: {catalog:tools} }

从“发货”队列传入:
Shipment1: { Header: {region:Europe} }
Shipment2: { Header: {region:America} }

每个队列都有一个绑定(bind),并根据 @StreamListener我可以按目录和地区不同地处理消息

例如
@StreamListener(target = OrderSink.ORDER_CHANNEL, condition = "headers['catalog'] == 'groceries'")
public void onGroceriesOrder(GroceryOder order){
...
}

所以问题是 ,如何使用新的 Spring Cloud Function 方法实现这一点?

在文档 https://cloud.spring.io/spring-cloud-static/spring-cloud-stream/3.0.2.RELEASE/reference/html/spring-cloud-stream.html#_event_routing提到:
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']
是否可以将路由表达式添加到绑定(bind)中(在 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 .如果是这样,您希望通过评估它会发生什么,因为唯一的两个选项可能是真/假。无论如何,这些都是修辞,但有助于理解问题以及如何解决它。

该表达式必须产生一个要路由到的函数值。所以。 . .
routing-expression: headers['catalog'] - 假设实际值catalog header 是要调用的函数的名称
routing-expression: headers['catalog']==groceries ? 'processGroceries' : 'processOther' - 将值 'groceries' 映射到 'processGroceries' 函数。

关于Spring Cloud 功能 - 不同消费者的单独路由表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61135632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com