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

带RabbitMQ的Spring Cloud Spring服务连接器

郑浩博
2023-03-14

我使用Spring云Spring服务连接器连接CloudFoundry上的Rabbitmq服务。

public class CloudConfig extends AbstractCloudConfig {

    @Bean
    public ConnectionFactory rabbitFactory()
    {
         return connectionFactory().rabbitConnectionFactory();
    }
}

但我需要声明一个CachingConnectionFactory并将其PublisherConfirms设置为true。因为我们需要使用PublisherConfig在向队列发送消息时检查确认。我不知道如何注入从cloud spring服务连接器获得的connectionFactory。或者我们如何处理这种情况。

共有3个答案

潘皓
2023-03-14

这是RabbitTemplate

@Bean
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate template = new RabbitTemplate(connectionFactory);
    template.setMandatory(true);
    template.setMessageConverter(new Jackson2JsonMessageConverter());
    template.setConfirmCallback((correlationData, ack, cause) -> {
        if (!ack) {
            System.out.println("send message failed: " + cause + correlationData.toString());
        } else {
            System.out.println("Publisher Confirm" + correlationData.toString());
        }
    });
    return template;
}

这是spring云配置:

@Bean
public ConnectionFactory rabbitConnectionFactory() {
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("publisherConfirms", true);
    RabbitConnectionFactoryConfig rabbitConfig = new RabbitConnectionFactoryConfig(properties);
    return connectionFactory().rabbitConnectionFactory(rabbitConfig);
}

当我使用此发件人发送消息时。结果是不期望的。

@Component
public class TestSender {

@Autowired
private RabbitTemplate rabbitTemplate;

@Scheduled(cron = "0/5 * *  * * ? ")
public void send() {
System.out.println("===============================================================");
    this.rabbitTemplate.convertAndSend(EXCHANGE, "routingkey", "hello world",
            (Message m) -> {
                m.getMessageProperties().setHeader("tenant", "aaaaa");
                return m;
            }, new CorrelationData(UUID.randomUUID().toString()));
    Date date = new Date();
    System.out.println("Sender Msg Successfully - " + date);
}

}

金嘉
2023-03-14

您可以按如下方式重新配置连接器创建的CCF:

@Bean
public SmartInitializingSingleton factoryConfigurer() {
    return new SmartInitializingSingleton() {

        @Autowired
        private CachingConnectionFactory connectionFactory;

        @Override
        public void afterSingletonsInstantiated() {
            this.connectionFactory.setPublisherConfirms(true);
        }
    };
}

在应用程序上下文完全初始化之前,必须确保不执行任何RabbitMQ操作(无论如何,这是最佳实践)。

董飞航
2023-03-14

该文档包括自定义连接器提供的连接细节的示例。

在你的情况下,你应该能够做这样的事情:

@Bean
public RabbitConnectionFactory rabbitFactory() {
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("publisherConfirms", true);

    RabbitConnectionFactoryConfig rabbitConfig = new RabbitConnectionFactoryConfig(properties);
    return connectionFactory().rabbitConnectionFactory(rabbitConfig);
}
 类似资料:
  • 我让RabbitMQ在CloudFoundry中运行,并尝试从本地运行的配置服务器进行连接,下面是在应用程序中配置的内容。yml文件 抛出以下启动异常 下面是pom.xml的依赖关系 我可以使用应用程序中提供的信息连接到控制台。yml但不确定为什么会抛出TimeoutException,任何输入都会非常有用,

  • 我在Windows10机器上尝试将RabbitMQ(3.6.11版本与Erlang 20一起安装)连接到ZipKin,但我得到了以下错误: 原因:org.springframework.beans.factory.unsatisfieddependencyException:创建名为“server configurator”的bean时出错,该bean在zipkin2.server.interna

  • 编辑问题以包含所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 我有一个nodejs客户端,它使用bramqp连接到RabbitMQ服务器。我的客户端可以连接到localhost中的Rabbit MQ服务器,运行良好。但它无法连接到另一台机器上的远程RabbitMQ服务器。我在远程服务器中打开了端口5672,因此我认为问题在于rabbitMQ服务器的配置。我如何解决这

  • 我试图创建docker-撰写文件,将运行django apache服务器与芹菜任务,并使用Rabbitmq作为消息经纪。我的问题是芹菜不能连接到Rabbitmq。我得到了这个错误: [2021-02-18 08:11:44,769:错误/主进程]消费者:无法连接到amqp://客人:**@Rabbitmq: 5672//:[Errno 111]连接拒绝。 这也是我第一次创建docker图像,所以我

  • 我刚刚编写了一个sprint引导应用程序来连接rabbitmq,并尝试发送一些测试消息,但连接被拒绝。Rabbitmq安装在docker中,该docker由命令<code>拉动。docker拉动Rabbitmq:3-management, 我用命令<;code>;docker run-d--hostname rabbit_test--name rabbitmq-p 15672:15672-p 56

  • 我刚刚开始使用rabbitmq,我目前正在rabbitmq网站上的教程中工作。我使用本地机器作为服务器完成了hello world教程。现在我想连接到另一台机器上的远程服务器。我的问题是我需要使用什么主机名来连接到这个服务器。它是安装rabbitmq服务器的机器的ip地址吗。