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

将Spring云Spring服务连接器与RabbitMQ一起使用,并启动发布服务器配置函数

薛彭薄
2023-03-14

我连接RabbitMQ与斯普林云配置:

@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);
}

2.设置RabbitTemplate.set强制性(true)和setConfirmCallback():

@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;
}

3.将消息发送到队列以调用发布者确认并打印日志。

@Component
public class TestSender {

@Autowired
private RabbitTemplate rabbitTemplate;

@Scheduled(cron = "0/5 * *  * * ? ")
public void send() {
    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);
 }
}

但出版商确认没有工作。日志尚未打印。无论真假,日志都不应该缺席。

共有1个答案

季博
2023-03-14

确认不需要强制,只需要返回。

有些事情要尝试:

  1. 打开调试日志以查看它的帮助;生成了一些关于确认的日志
  2. 添加一些代码

.

template.execute(channel -> {
    system.out.println(channel.getClass());
    return null;
}

如果您没有看到PublisherCallbackChannelImpl,则表示由于某种原因配置不起作用。同样,调试日志应该有助于配置调试。

如果你仍然不能弄清楚,把你的应用程序剥离到显示行为的最低限度,然后发布完整的应用程序。

 类似资料:
  • 我目前正在尝试学习微服务架构。我一直在尝试开发一个 Spring 启动应用程序。我刚刚在我的应用程序中实现了配置服务器。在我实现配置服务器之前,liquibase 在这些属性上工作正常。 实现后,我的服务没有找到db.changelog-master.xml文件。db.changelog目录在我的服务资源下。我应该如何更改“更改日志”属性?

  • 我已经从spring的initialzr生成了一个Spring Boot配置服务器。 我已经用brew安装了rabbitmq。initialzr是使用启动版本2.1.1.RELEASE和云版本Greenwich.M3生成的。 简单的rest服务连接到rabbitmq队列。配置服务器连接到gitlab配置报告。 但是,当我提交并推送更改时,服务应用程序不会反映该更改。推送完成后,配置服务器将收到日志

  • 我正在关注应用程序中的条目。 我有下面的spring云服务器应用程序代码。 我收到以下错误。 启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2021 02月24日01:39:52.356错误20804---[restartedMain]o.s.b.d.LoggingFailureAnalysisReporter: 应用程序无法启动 描述:

  • 我正在使用Spring Cloud Config服务器,能够检测来自git存储库的更改并将其传递给配置客户机。 有两种方法,我已经实现了: null 所以两者都工作得很好,那么使用Spring Cloud Bus有什么好处吗?或者在生产环境中,不使用Spring Cloud Bus会有什么问题吗?因为将需要额外的工作来设置RabbitMQ集群(HA)作为生产中的Spring云总线。 谢谢,大卫

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

  • 我正在使用Spring Cloud Config Server和一个简单的Spring Boot项目。所以我有一个Spring Cloud Config Service服务和另一个连接到Spring Cloud Config Service以获取数据库凭据和其他属性等一些属性的简单服务。如果我在本地测试它一切正常,但如果我尝试将这2个服务作为docker容器启动,它就不起作用了。Spring Cl