所有其他交换类型均在 http://www.springframework.org/schema/rabbit 模式中声明,但在其中找不到 x-consistent-hash-exchange。在哪里定义的?
我尝试在 XML 中实现一致的哈希交换,但是,这是我尝试使用 Rabbit 模式中的 if 后遇到的异常:
线程“main”中的异常 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: URL [file:/conf/spring/mq-admin.xml] 中 XML 文档中的第 64 行是 无效的;嵌套异常是 org.xml.sax.SAXParseException; 行号:64;列数:84; cvc-complex-type.2.4.c:匹配 通配符是严格的,但找不到元素的声明 '兔子:x-一致性哈希交换'
确实如此,
ConsistentHashExchange
没有自定义 XML 标签。
最后所有这些标头都声明了一些 bean 定义。
对于这个来说,这样做就足够了:
<beans:bean id="myConsistentHashExchange" class="org.springframework.amqp.core.ConsistentHashExchange">
<beans:constructor-arg name="name" value="myConsistentHashExchange"/>
<beans:property name="hashHeader" value="myHashHeader"/>
</beans:bean>
我们没有计划扩展 XML 支持。
更新
对于
3.2
之前的版本,我们必须使用CustomExchange
来定义bean:
<beans:bean id="myConsistentHashExchange" class="org.springframework.amqp.core.CustomExchange">
<beans:constructor-arg name="name" value="myConsistentHashExchange"/>
<beans:constructor-arg name="type" value="x-consistent-hash"/>
<beans:constructor-arg name="durable" value="true"/>
<beans:constructor-arg name="autoDelete" value="true"/>
<beans:constructor-arg name="arguments">
<beans:map>
<beans:entry key="hash-header" value="myHashHeader"/>
</beans:map>
</beans:constructor-arg>
</beans:bean>
结果是这样的:
注意:必须在代理上启用
rabbitmq_consistent_hash_exchange
插件:https://github.com/rabbitmq/rabbitmq-server/tree/main/deps/rabbitmq_consistency_hash_exchange