关于SpringCloud整合RabbitMQ的应用详解(ack,限流,幂等)

安装RabbitMQ

安装Eralng与RabbitMQ

导包
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
生产者配置

关于spring.rabbitmq.template.mandatory与spring.rabbitmq.publisher-returns

  1. spring.rabbitmq.template.mandatory属性的优先级高于spring.rabbitmq.publisher-returns的优先级
  2. spring.rabbitmq.template.mandatory属性可能会返回三种值null、false、true,
  3. spring.rabbitmq.template.mandatory结果为true、false时会忽略掉
  4. spring.rabbitmq.publisher-returns属性的值
    spring.rabbitmq.template.mandatory结果为null(即不配置)时结果由spring.rabbitmq.publisher-returns确定

在springboot2.2.0.RELEASE版本之前是amqp正式支持的属性,用来配置消息发送到交换器之后是否触发回调方法,在2.2.0及之后spring.rabbitmq.publisher-confirm属性过期使用spring.rabbitmq.publisher-confirm-type属性配置代替,用来配置更多的确认类型;

  • NONE值是禁用发布确认模式,是默认值;
  • CORRELATED值是发布消息成功到交换器后会触发回调方法;
  • SIMPLE值经测试有两种效果,其一效果和CORRELATED值一样会触发回调方法,其二在发布消息成功后使用rabbitTemplate调用waitForConfirms或waitForConfirmsOrDie方法等待broker节点返回发送结果,根据返回结果来判定下一步的逻辑,要注意的点是waitForConfirmsOrDie方法如果返回false则会关闭channel,则接下来无法发送消息到broker;
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#开启 return 确认机制
#spring.rabbitmq.publisher-returns=true
#设置为true后消费者在消息没有被路由到合适队列情况下会被return监听,而不会自动删除
spring.rabbitmq.template.mandatory=true
#开启confirm确认机制
spring.rabbitmq.publisher-confirm-type=correlated
创建bind交换机与队列
package org.example.rabbit.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectRabbitConfig {
   
    //队列 起名:TestDirectQueue
//    @Bean
//    public Queue TestDirectAQueue() {
   
//        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
//        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
//        // autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
//        //   return new Queue("TestDirectQueue",true,true,false);
//
//        //一般设置一下队列的持久化就好,其余两个就是默认false
//        return new Queue("direct.A",false);
//    }
//
//    @Bean
//    Queue queueDirectBName() {
   
//        return new Queue("direct.B",false);
//    }
//
//    /**
//     * Direct交换机 起名:TestDirectExchange
//     * 直连交换机:Direct exchange
//     * 扇形交换机:Fanout exchange
//     * 主题交换机:Topic exchange
//     * 首部交换机:Headers exchange
//     * @return
//     */
//    @Bean
//    DirectExchange bindingTestDirectExchange() {
   
//        //  return new DirectExchange("TestDirectExchange",true,true);
//        return new DirectExchange("TestDirectExchange",true,false);
//    }
//
//    //绑定  将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting
//
//    @Bean
//    Binding bindingDirectA() {
   
//        return BindingBuilder.bind(TestDirectAQueue()).to(binding
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值