当前位置: 首页 > 知识库问答 >
问题:

如何在Spring boot AMQP中获取通道对象并创建类型为“x-consistent-hash”的交换

柯梓
2023-03-14

提到的在RabbitMQ中创建一致散列交换的示例一致散列交换Github使用通道来创建交换:

private static String CONSISTENT_HASH_EXCHANGE_TYPE = "x-consistent-hash";
...
Channel ch = conn.createChannel();
...
ch.exchangeDeclare("e1", CONSISTENT_HASH_EXCHANGE_TYPE, true, false, null);

@Configuration
@EnableAutoConfiguration
public class AMQPConfig {

    public static final String QUEUENAME = "consistentHashing-Q1";
    public static final String EXCHANGENAME = "consistentHashing-DE1";
    public static final String RK = "consistentHashing-RK1";


    @Bean
    public Queue queue() {
        return QueueBuilder.nonDurable(QUEUENAME).autoDelete().build();
    }

    @Bean
    public DirectExchange directExchange()  {
        return ExchangeBuilder.directExchange(EXCHANGENAME).autoDelete().withArgument("Type", "x-consistent-hash").build();
    }

    @Bean
    public Binding binding(Queue queue, Exchange exchange)    {
        return BindingBuilder.bind(queue).to(exchange).with(RK).noargs();
    }
}

  1. 想知道如何在Spring boot中获取通道对象

共有2个答案

张英范
2023-03-14

能够使用以下代码在Spring BootAMQP中创建一致性哈希交换:

@Bean
public CustomExchange customExchange()  {
    CustomExchange customExchange = new CustomExchange(EXCHANGENAME, "x-consistent-hash", false, true);
    customExchange.addArgument("hash-header", "client-id");
    return customExchange;
}
佴保臣
2023-03-14

Spring AMQP没有将自定义交换声明为@Bean定义的机制,但是您可以使用RabbitTemboard来获得一个通道来自己声明它。

Exchange.DeclareOk = rabbitTemplate.execute(channel -> channel.exchangeDeclare(...));
 类似资料:
  • Description This module provides consistent hashing algorithm for upstream load-balancing. If one of backend servers is down, the request of this client will be transferred to another server. server _

  • 因此,我试图创建一个具有初始化方法的类,该方法需要获取被创建对象的类型,以便正确设置init参数的默认值。 举一个具体的代码例子,假设我有如下的类: 这是我正在寻找的功能,但我的IDE说,我可以理解,因为尚未实例化。所以我的问题是如何正确实现它?我不想“硬编码”类类型,因为这个类的子类可能有自己的和值,我希望这些子类使用与其类型相对应的类变量。 我的解决方案需要在Python 3.6中工作

  • 本文向大家介绍如何在Python中创建类对象?,包括了如何在Python中创建类对象?的使用技巧和注意事项,需要的朋友参考一下 使用该类的构造函数创建一个类对象。然后将该对象称为类的实例。类实例化使用函数表示法。  在下面的代码中,我们定义一个类并创建了相同类的实例,如下所示

  • 我试图为Java中的abject数组获取用户输入。但它工作不正常。我创建了第一个类并声明了所有属性,还创建了构造函数、geter和seter。但是当我在数组中保存对象时,它不能正常工作

  • 编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。 我试图在Java中获取abject数组的用户输入。但是它不能正常工作。我创建了第一类并声明了所有属性,创建了构造函数、geter和seters。但是当我在数组中保存服从对象时,它不能正常工作

  • 问题内容: 我想访问作为的实例的基础类的类名。 这可能吗? 问题答案: 您可以通过调用获取创建代理的对象 注意,在没有 基础类 的情况下。代理定义为: 接口 调用处理程序 通常将包装好的类传递给具体的调用处理程序。