rabbitmq

在这里插入图片描述

  • 流程:
    消息生产者生产一条消息(Message) ->
    发送给服务器(Broker) ->
    Broker把消息给合适的交换器(Exchange) ->
    交换器绑定了很多队列(Queues) ->
    交换器根据绑定规则(Bindings)把消息交给指定队列
    消费者连接相应队列取走消息

  • 交换器类型:

    • direct(点对点)
      在这里插入图片描述
      只有发送消息时候的路由键 和 队列绑定的路由键完全一样才算匹配上
      在这里插入图片描述

    • fanout (广播模式)
      在这里插入图片描述
      只要发送消息,无论路由键是什么都会给每个绑定的队列

    • topic
      在这里插入图片描述
      topic允许路由键使用通配符,#匹配0个或多个单词,*匹配一个单词

测试环境安装rabbitmq

下载Erlang
在这里插入图片描述
erlang环境变量
在这里插入图片描述
cmd erl 检查是否配置成功

erlang版本下载的24.2,那面rabbitmq版本区间如下
在这里插入图片描述
下载rabbitmq
rabbitmq sbin -> cmd -> rabbitmq-plugins enable rabbitmq_management
rabbitmq sbin/rabbitmq-server.bat 即可启动
访问路径 http://localhost:15672 默认账号密码 guest guest

延时队列

	// ====================================== 延时配置  =============================================================
    // 任务订单, 延时Exchange
    @Bean("taskDelayExchange")
    public DirectExchange delayExchange(){
        return new DirectExchange(ResourceKeys.RabbitMQ.TASK_DELAY_EXCHANGE);
    }

    // 声明延时队列,并绑定到对应的死信交换机
    @Bean("taskDelayQueue")
    public Queue taskDelayQueue(){
        Map<String, Object> args = Maps.newHashMapWithExpectedSize(2);
        // x-dead-letter-exchange    这里声明当前队列绑定的死信交换机
        args.put("x-dead-letter-exchange", ResourceKeys.RabbitMQ.TASK_DEAD_EXCHANGE);
        // x-dead-letter-routing-key  这里声明当前队列的死信路由key
        args.put("x-dead-letter-routing-key", ResourceKeys.RabbitMQ.TASK_DEAD_ROUTING_KEY);
        // x-message-ttl  声明队列的TTL
        args.put("x-message-ttl", 6000);
        return QueueBuilder.durable(ResourceKeys.RabbitMQ.TASK_DELAY_QUEUE).withArguments(args).build();
    }

    @Bean
    public Binding taskDelayBinding(@Qualifier("taskDelayQueue") Queue queue,
                               @Qualifier("taskDelayExchange") DirectExchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ResourceKeys.RabbitMQ.TASK_DELAY_ROUTING_KEY);
    }

	// ====================================== 死信配置  =============================================================

    // 任务订单, 死信Exchange
    @Bean("taskDeadExchange")
    public DirectExchange deadLetterExchange(){
        return new DirectExchange(ResourceKeys.RabbitMQ.TASK_DEAD_EXCHANGE);
    }
    // 任务订单, 死信queue
    @Bean("taskDeadQueue")
    public Queue deadLetterQueueA(){
        return new Queue(ResourceKeys.RabbitMQ.TASK_DEAD_QUEUE);
    }

    @Bean
    public Binding taskDeadBinding(@Qualifier("taskDeadQueue") Queue queue,
                                   @Qualifier("taskDeadExchange") DirectExchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ResourceKeys.RabbitMQ.TASK_DEAD_ROUTING_KEY);
    }

配置两个队列,一个延时队列,一个死信队列
生产者生产一条消息发送给延时交换机(携带延时路由键),延时队列配置了ttl,当消息抵达延时队列ttl到期后就会转发到死信交换机,监听死信队列即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值