博客
关于我
电商项目——消息队列——第十一章——中篇
阅读量: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/

    你可能感兴趣的文章
    PLC编程语言ST文本语法的常用数据类型及变量
    查看>>
    PLC通讯方式
    查看>>
    Please install 'webpack-cli' in addition to webpack itself to use the CLI
    查看>>
    Ploly Dash,更新一个Dash应用程序JJJA上的实时人物
    查看>>
    Ploly烛台的定制颜色
    查看>>
    Ploly:如何在Excel中嵌入完全交互的Ploly图形?
    查看>>
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>