博客
关于我
电商项目——消息队列——第十一章——中篇
阅读量:326 次
发布时间:2019-03-04

本文共 1652 字,大约阅读时间需要 5 分钟。

RabbitMQ 简介与使用实践

RabbitMQ 简介

RabbitMQ 是一个开源的消息队列系统,广泛应用于分布式系统中的消息中继与解耦。其核心功能包括点对点排队和发布/订阅模式,支持异步处理、大规模流量处理以及系统间解耦等场景。

消息代理与使用场景

消息代理是 RabbitMQ 的核心功能,负责接收、存储和分发消息。其主要场景包括:

  • 异步处理:例如用户注册时,发送邮件和短信可以作为异步任务处理。
  • 应用解耦:通过将业务逻辑移出消息队列,减少服务间耦合。
  • 流量监控:处理大并发请求,防止系统过载。
  • RabbitMQ 安装与配置

    安装命令

    docker run --name rabbitmq \-p 5671:5671 -p 5672:5672 \-p 4369:4369 -p 25672:25672 \-p 15671:15671 -p 15672:15672 \rabbitmq:management

    安装完成后,访问 虚拟机IP:15672 进入管理界面。

    SpringBoot 整合

  • 依赖添加

    org.springframework.boot
    spring-boot-starter-amqp
  • 配置管理:在 application.yml 中添加:

    spring:    rabbitmq:        host: 192.168.56.10        port: 5672        virtual-host: #
  • 启用插件:在主类加注解 @EnableRabbit

  • Exchange 类型与操作

    RabbitMQ 提供四种交换机类型,常用 DirectExchange 和 TopicExchange。

    DirectExchange

    直接交换机,消息直接投送至队列,无路由键转换。

    TopicExchange

    主题交换机,基于主题模式路由消息,支持多级匹配。

    FanoutExchange

    扇出交换机,消息同时投送至所有绑定的队列。

    Exchange 绑定

  • 创建交换机:

    amqpAdmin.declareExchange(new DirectExchange("hello-java-exchange", true, false));
  • 创建队列:

    amqpAdmin.declareQueue(new Queue("hello-java-queue", true, false, false));
  • 绑定交换机与队列:

    amqpAdmin.declareBinding(new Binding("hello-java-queue", Binding.DestinationType.QUEUE, "hello-java-exchange", "hello-java-queue", null));
  • 消息可靠传输

    发送端确认

  • 配置发送端:

    rabbitTemplate.setConfirmCallback(new ConfirmCallback() {    @Override    public void confirm(CorrelationData correlationData, boolean ack, String cause) {        // 确认消息成功接收    }});
  • 发送消息时启用确认机制:

    spring.rabbitmq.publisher-confirm-type=correlated
  • 消费端确认

  • 配置消费端:

    spring.rabbitmq.listener.simple.acknowledge-mode=manual
  • 消费消息时手动确认:

    channel.basicAck(deliveryTag, false);
  • 结论

    通过以上配置和实践,RabbitMQ 可以有效支持系统的消息中继与解耦,提升消息处理能力和系统稳定性。

    转载地址:http://dkhq.baihongyu.com/

    你可能感兴趣的文章
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>
    Numix Core 开源项目教程
    查看>>
    numpy
    查看>>
    NumPy 或 Pandas:将数组类型保持为整数,同时具有 NaN 值
    查看>>
    numpy 或 scipy 有哪些可能的计算可以返回 NaN?
    查看>>
    numpy 数组 dtype 在 Windows 10 64 位机器中默认为 int32
    查看>>
    numpy 数组与矩阵的乘法理解
    查看>>
    NumPy 数组拼接方法-ChatGPT4o作答
    查看>>
    numpy 用法
    查看>>
    Numpy 科学计算库详解
    查看>>
    Numpy.fft.fft和numpy.fft.fftfreq有什么不同
    查看>>
    Numpy.ndarray对象不可调用
    查看>>
    Numpy:按多个条件过滤行?
    查看>>
    Numpy:条件总和
    查看>>
    numpy、cv2等操作图片基本操作
    查看>>
    numpy判断对应位置是否相等,all、any的使用
    查看>>
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    numpy数组替换其中的值(如1替换为255)
    查看>>
    numpy数组索引-ChatGPT4o作答
    查看>>