RabbitMQ 第一天 基础 5 Spring 整合RabbitMQ 5.4 Spring 整合 RabbitMQ【配置详解】

news2024/12/25 8:51:23

RabbitMQ

【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】

文章目录

      • RabbitMQ
      • 第一天 基础
      • 5 Spring 整合RabbitMQ
        • 5.4 Spring 整合 RabbitMQ【配置详解】
          • 5.4.1 配置详解

第一天 基础

5 Spring 整合RabbitMQ

5.4 Spring 整合 RabbitMQ【配置详解】

5.4.1 配置详解

OK,到这里我们已经完成 了Spring 对RabbitMQ 的整合

在这里插入图片描述

不难发现,除了配置麻烦,其他确实 是代码非常 少

接下来就对配置进行 一个介绍解释

【生产者配置文件】

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/rabbit
       http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
    <!--加载配置文件-->
    <context:property-placeholder location="classpath:rabbitmq.properties"/>

    <!-- 定义rabbitmq connectionFactory -->
    <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
                               port="${rabbitmq.port}"
                               username="${rabbitmq.username}"
                               password="${rabbitmq.password}"
                               virtual-host="${rabbitmq.virtual-host}"/>
    <!--定义管理交换机、队列-->
    <rabbit:admin connection-factory="connectionFactory"/>

    <!--定义持久化队列,不存在则自动创建;不绑定到交换机则绑定到默认交换机
    默认交换机类型为direct,名字为:"",路由键为队列的名称
    -->
    <rabbit:queue id="spring_queue" name="spring_queue" auto-declare="true"/>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~广播;所有队列都能收到消息~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <!--定义广播交换机中的持久化队列,不存在则自动创建-->
    <rabbit:queue id="spring_fanout_queue_1" name="spring_fanout_queue_1" auto-declare="true"/>

    <!--定义广播交换机中的持久化队列,不存在则自动创建-->
    <rabbit:queue id="spring_fanout_queue_2" name="spring_fanout_queue_2" auto-declare="true"/>

    <!--定义广播类型交换机;并绑定上述两个队列-->
    <rabbit:fanout-exchange id="spring_fanout_exchange" name="spring_fanout_exchange" auto-declare="true">
        <rabbit:bindings>
            <rabbit:binding queue="spring_fanout_queue_1"/>
            <rabbit:binding queue="spring_fanout_queue_2"/>
        </rabbit:bindings>
    </rabbit:fanout-exchange>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~通配符;*匹配一个单词,#匹配多个单词 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <!--定义广播交换机中的持久化队列,不存在则自动创建-->
    <rabbit:queue id="spring_topic_queue_star" name="spring_topic_queue_star" auto-declare="true"/>
    <!--定义广播交换机中的持久化队列,不存在则自动创建-->
    <rabbit:queue id="spring_topic_queue_well" name="spring_topic_queue_well" auto-declare="true"/>
    <!--定义广播交换机中的持久化队列,不存在则自动创建-->
    <rabbit:queue id="spring_topic_queue_well2" name="spring_topic_queue_well2" auto-declare="true"/>

    <rabbit:topic-exchange id="spring_topic_exchange" name="spring_topic_exchange" auto-declare="true">
        <rabbit:bindings>
            <rabbit:binding pattern="heima.*" queue="spring_topic_queue_star"/>
            <rabbit:binding pattern="heima.#" queue="spring_topic_queue_well"/>
            <rabbit:binding pattern="itcast.#" queue="spring_topic_queue_well2"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>

    <!--定义rabbitTemplate对象操作可以在代码中方便发送消息-->
    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/>
</beans>

来解读一下

<!--加载配置文件-->
<context:property-placeholder location="classpath:rabbitmq.properties"/>
  • context:名称空间【Spring 提供的】

  • 下面的rabbit 开头的都是rabbitMQ 提供的 xmlns:rabbit="http://www.springframework.org/schema/rabbit"

    由这个提供的

    换句话说是 导入了一个约束文件http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"

<!-- 定义rabbitmq connectionFactory -->
<rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
                           port="${rabbitmq.port}"
                           username="${rabbitmq.username}"
                           password="${rabbitmq.password}"
                           virtual-host="${rabbitmq.virtual-host}"/>

这个没啥说的,就是声明了一些 连接参数

再下来

<rabbit:queue id="spring_queue" name="spring_queue" auto-declare="true"/>

声明队列【参数解释】

  • id:bean 的名称
  • name:队列 queue 的名称
  • auto-declare:是否自动创建
  • 【还有一些其他的】
  • auto-delete:自动删除【最后一个 消费者 和该队列断开连接 后,自动删除 队列】
  • durable:是否持久化
  • exclusive:是否排他【即独占连接的意思】
<!--定义广播类型交换机;并绑定上述两个队列-->
<rabbit:fanout-exchange id="spring_fanout_exchange" name="spring_fanout_exchange" auto-declare="true">
    <rabbit:bindings>
        <rabbit:binding queue="spring_fanout_queue_1"/>
        <rabbit:binding queue="spring_fanout_queue_2"/>
    </rabbit:bindings>
</rabbit:fanout-exchange>

声明交换机,属性和队列 差不多,主要是 绑定的属性 根据交换机类型的不同 有所差异

  • id:bean的名称
  • name:交换机的名称
    auto-declare:自动删除。 最后一个队列和该交换机断开连接后,自动删除交换机
    <!--定义rabbitTemplate对象操作可以在代码中方便发送消息-->
    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/>

<rabbit:template />

  • id:bean的名称 connection-factory:工厂bea的名称

【就这样吧,当然马上我们就会 使用SpringBoot 来实现一次,自动装配,就更舒服些了,致敬老一代 程序员】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

由SOFARPC示例介绍基本流程和基础源码

由SOFARPC示例介绍基本流程和基础源码 1. Server 先看 Server 端测试方法&#xff1a; public class QuickStartServer {public static void main(String[] args) {ServerConfig serverConfig new ServerConfig().setProtocol("bolt") // 设置一个协议&#xff0…

内容资产管理11问

&#x1f447;点击一键关注主笔&#xff1a;邹小困、邝晴岚主持人&#xff1a;增长黑盒分析师Emma出品&#xff1a;增长黑盒研究组前言在这个信息爆炸的数据时代&#xff0c;各个行业正积极推进数字化转型&#xff0c;产业升级与技术赋能成为主题之一。在推进企业线上线下融合的…

SEO 已死,LLMO 万岁

“北风那个吹&#xff0c;雪花那个飘”&#xff0c;我手捧一杯咖啡&#xff0c;听着白毛女。朋友坐在对面高谈阔论&#xff1a;“有了 ChatGPT&#xff0c;我再也不缺内容了&#xff0c;SEO 的春天就要来了&#xff01;”然而他没有看到真相是 —— ChatGPT 直接颠覆了 SEO 行业…

JVM【垃圾回收相关概念和垃圾回收器】

垃圾回收相关概念 System.gc()的理解 在默认情况下&#xff0c;通过**system.gc&#xff08;&#xff09;**者Runtime.getRuntime().gc() 的调用&#xff0c;会显式触发FullGC&#xff0c;同时对老年代和新生代进行回收&#xff0c;尝试释放被丢弃对象占用的内存。 然而syste…

AutoDL+Xftp+Xshell+VSCode配合使用教程

一、AutoDL AutoDL是一款经过众多算法业内大牛精心调教的云GPU深度学习环境出租平台。随着人工智能发展逐渐变成混合学科经验科学学科的深海区神器&#xff0c;一款高效的云GPU深度学习出租平台成为每一个深度学习的从业者的最大痛点。如何解决数据痛点&#xff0c;计算资源痛…

python--可重用的登录注册系统(上)

文章目录预期目标一、基本逻辑设计数据库模型二、前端界面设计与优化完善登录的视图函数三、session会话与登录的视图函数四、将项目上传到远程仓库预期目标 实现注册&#xff08;邮箱、手机、qq、微信&#xff09; 登录 注销等功能 路由配置 视图配置 数据库模型 模板&#xf…

生物系转行学编程,如今身家26亿

在编程界有许多明星级别的大牛&#xff0c;他们有些人学习成绩很差&#xff0c;有些人甚至不是科班出身&#xff0c;但对编程的狂热和努力&#xff0c;成就了他们在IT界“名利双收”的地位。 在我们中国编程界就有这样一位大牛&#xff0c;非科班出身&#xff0c;却做到了神一般…

el-pagination 动态切换每页条数、页数切换

目录 业务场景 官方链接 实现效果 使用框架 代码展示 template代码 script代码 变量定义 事件定义 handleSizeChange事件--实现每页条数改变表格动态变化 handleCurrentChange事件--切换页码 css代码 完整代码 总结 业务场景 当表格中的数据量如果非常庞大的时候我们…

【Javascript基础】--零基础--超详细且简洁的Javascript笔记--代码质量(03)

在浏览器中调试 在编写代码前看看调试。 调试是指在一个脚本中找出并修复错误的过程。 在这里我们将会使用 Chrome&#xff08;谷歌浏览器&#xff09;&#xff0c;因为它拥有足够多的功能&#xff0c;其他大部分浏览器的功能也与之类似。 “资源&#xff08;Sources&#…

为什么编程入门从Python学起?

目前&#xff0c;青岛市的小学、初中、高中对于编程教育和信息学的推进几乎都选中了Python。 浙江省新高中信息技术教材改革项目中&#xff0c;高中新生开始使用新教材&#xff0c;里面的编程语言将换用 Python&#xff0c;Python 将正式纳入高考内容。 Python是一种代表简单主…

看BP(后向投影算法)英文文献生词记录

看BP&#xff08;后向投影算法&#xff09;英文文献生词记录 总的来说&#xff0c;该论文是在讲CAT和SAR的后向投影算法之间的联系与区别 acoustic imaging 原声成像 polychromatic 美 [pɒlɪkroʊ’mtɪk] 英 [pɒlɪkrəʊ’mtɪk] adj.多色的 illumination 美 [ɪˌlum…

建筑“光储直柔”配用电系统关键技术分析

低碳发展背景下的建筑“光储直柔”配用电系统关键技术分析&#xff08;2021&#xff09; 摘 要 在低碳发展的背景下&#xff0c;为适应高比例的可再生能源结构&#xff0c;建筑电气化已经成为未来的发展趋势。建筑电气化不仅要提高建筑电气化率&#xff0c;还要发展新型建筑配…

RV1126笔记九:RTMP服务器搭建

若该文为原创文章,转载请注明原文出处 一、介绍 搭建RTMP服务器主要是为了在RV1126上实现RTMP推拉流功能测试使用,如果条件允许可以把RTMP服务器部署到公网服务器上,搭建的RTMP服务器只支持h264,h265需要自行修改。 这里介绍两种方式搭建RTMP服务器: 一、使用开源的SRS…

从架构层面了解Kubernetes

一. 背景 1、 为什么K8s战胜了Swarm、Mesos 从使用上来说以声明式API来降低运维的操作成本。在生态系统建设方面以极高的可扩展性来提升社区活跃度。从这两个方面既可以填充K8s的不足&#xff0c;也极大的简化了运维操作过程。 2、 架构侧面 在K8s的各种文档、书籍中都没有…

【源码共读】Vue2 中为什么可以使用 this 访问各种选项中的属性?

如何阅读源码 网上有很多关于源码阅读的文章&#xff0c;每个人都有自己的方式&#xff0c;但是网上的文章都是精炼之后的&#xff0c;告诉你哪个文件、那个函数、那个变量是干什么的&#xff1b; 但是没有告诉你这些是怎么找到的&#xff0c;这些是怎么理解的&#xff0c;这…

港科夜闻|叶玉如校长回应「香港创科发展蓝图」

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大校长叶玉如教授回应「香港创科发展蓝图」。近日&#xff0c;粤港澳大湾区院士联盟表示希望特区政府切实落实「蓝图」内容&#xff0c;设立具体行动措施和可量化的指标&#xff0c;以更大的魄力和决心实现当中的目标…

C++11标准模板(STL)- 算法(std::iota)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 用从起始值开始连续递增的…

10.1、Django框架入门--后台管理

文章目录预备知识MVC模式和MTV模式MVC模式MTV 模式Django框架Django框架简介Django框架中的后台管理启动后台admin站点管理数据库迁移创建管理员用户管理界面本地化创建并使用一个应用bookapp项目的数据库模型创建数据库模型生成数据库表数据库上的基本操作启用后台admin站点管…

【源码共读】如何优雅的处理 Promise 的错误

Promise解决了优雅的解决了回调地域的问题&#xff0c;现在已经大范围的使用Promise&#xff0c;但是在使用Promise的过程中&#xff0c;最令人头疼的就是错误处理的方式。 Promise 的错误处理方式 据我对Promise的了解&#xff0c;Promise的错误处理分为下面的几种方式&…