发布网友 发布时间:2023-05-26 15:42
共1个回答
热心网友 时间:2024-12-05 05:48
应用启动类
启动应用启动类之后生成一个带有 alternate-exchange 属性的 Exchange 。
hao.miao.exchange.pay 是个包含 alternate-exchange 属性的 topic 类型的 exchange (route key是 hao.miao.pay.* ,队列名是 hao.miao.pay ), alternate-exchange 属性指定的是 fanout 类型的exchange,exchange的名称是 hao.miao.exchange.order (绑定到 hao.miao.order 队列)
如果正确的路由(符合 hao.miao.pay.* )规则,则 hao.miao.pay 队列接收到消息。如果是不正确的路由(不符合 hao.miao.pay.* )规则,则路由到 hao.miao.exchange.pay Exchange指定的 alternate-exchange 属性的Exchange中。
启动应用类:
此时发送消息到名为 hao.miao.exchange.pay 的 Exchange ,而 Route key 是 hao.miao.pay.aaa ,所以能正确地路由到 hao.miao.pay 队列中。
当指定的 Route key 不能正确的路由的时候,则直接发送到名为 hao.miao.exchange.order 的 Exchange ,而因为我们定义的 Exchange 类型是 fanout 类型,所以就能路由到 hao.miao.order 队列中了。
一般 alternate-exchange 属性的值最好是 fanout 类型的 exchange ,否则还会根据 route key 与 alternate-exchange 属性的 exchange 进行匹配再去路由。而如果指定了 fanout 类型的 exchange ,不需要去匹配 routekey 。
示列说明
创建了一个 topic 类型的Exchange带有 alternate-exchange 属性,其 alternate-exchange 的 exchange 也是 topic 类型的 exchange ,如果消息的 route key 既不能,这个消息就会丢失。可以触发 publish confirm 机制,表示这个消息没有确认。
配置:
正常路由到Exchange名为head.info路由的队列中。
路由到Exchange名为head.info指定的alternate-exchange配置的head.error所路由的队列中。
二者都不符合则消息丢失,可以使用publish confirm来做生产端的消息确认,因为消息没有正确路由到队列,所以触发了return method。
配置:
Alternate Exchange官网