当前位置: 首页 > news >正文

RabbitMQ创建交换机和队列——配置类 注解

交换机的类型

Fanout:广播,将消息交给所有绑定到交换机的队列。

Direct:订阅,基于RoutingKey(路由key)发送给订阅了消息的队列。

Topic:通配符订阅,与Direct类似,只不过RoutingKey可以使用通配符(# (一个或多个单词)和 * (一个单词))。

Headers:头匹配,基于MQ的消息头匹配,用的较少。

准备

导入依赖:

        <!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency>

配置文件:

spring:rabbitmq:host: ****** # 你的虚拟机/服务器IPport: 5672 # 端口virtual-host: **** # mq虚拟主机username: *** # 用户名password: *** # 密码

这里用direct类型的交换机举例:

基于配置类

步骤一:配置类中创建交换机和队列的Bean,并设置绑定关系,设置routingKey为sdg

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FanoutConfiguration {@Beanpublic DirectExchange directExchange() {return new DirectExchange("exchange01.direct");//或者return ExchangeBuilder.directExchange("exchange01.direct").build();}@Beanpublic Queue queue() {return new Queue("direct.queue01");}@Beanpublic Binding bind01(DirectExchange directExchange, Queue queue){return BindingBuilder.bind(queue).to(directExchange).with("sdg");}
}

步骤二:发送者发送消息

    @Testpublic void test5() {String exchange = "exchange01.direct";String message = "Hello World!";rabbitTemplate.convertAndSend(exchange,"sdg",message);}

 步骤三:消费者消费消息

package com.itheima.consumer.mq;import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Slf4j
@Component
public class SpringRabbitListener {@RabbitListener(queues = "direct.queue01")public void queue01Listener(String msg) {System.out.println("收到消息: "+msg);}
}

 direct模式由于要绑定多个KEY,每一个Key都要编写一个binding,会非常麻烦,基于配置类适用与简单的情况,所以我们就可以基于注解来声明交换机、队列和绑定关系

基于注解

消费者:

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class SpringRabbitListener {@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue01"),exchange = @Exchange(name = "htsdg.direct",type = ExchangeTypes.DIRECT),key = {"sdg","ht"}))//默认类型为directpublic void queue01Listener(String msg) {System.out.println("收到消息: "+msg);}
}

再来一个topic类型的:

发送者:

    @Testpublic void test5() {String exchange = "htsdg.direct";String message = "Hello World!";rabbitTemplate.convertAndSend(exchange,"china.qianXueSen",message);}

消费者:

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue1"),exchange = @Exchange(name = "htsdg.topic", type = ExchangeTypes.TOPIC),key = "china.#"
))
public void listenTopicQueue1(String msg){System.out.println("消费者1接收到topic.queue1的消息:【" + msg + "】");
}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue2"),exchange = @Exchange(name = "htsdg.topic", type = ExchangeTypes.TOPIC),key = "#.news"
))
public void listenTopicQueue2(String msg){System.out.println("消费者2接收到topic.queue2的消息:【" + msg + "】");
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】Linux平台C++实现简单socket通信
  • Python精选200Tips:126-130
  • SciPy 插值
  • CI/CD持续集成和持续部署以及相关软件的使用
  • xLSTM模型学习笔记
  • 商务办公tips1:如何将网页转换为pdf
  • 视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践
  • Adobe After Effects 2022 安装包及全家桶下载:永久免费提供完整安装指南
  • [数据集][目标检测]男女性别检测数据集VOC+YOLO格式9769张2类别
  • GeoPandas在地理空间数据分析中的应用
  • 源代码审查范围为:
  • Maven从入门到精通(三)
  • 力扣3014.输入单词需要的最少按键次数I
  • 11、LLaMA-Factory自定义数据集微调
  • 区块链的可伸缩性以及面临的挑战
  • CSS相对定位
  • download使用浅析
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java8 Stream Pipelines 浅析
  • Java反射-动态类加载和重新加载
  • Linux下的乱码问题
  • Python利用正则抓取网页内容保存到本地
  • 翻译--Thinking in React
  • 构建工具 - 收藏集 - 掘金
  • 机器学习 vs. 深度学习
  • 山寨一个 Promise
  • 一、python与pycharm的安装
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 容器镜像
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (2015)JS ES6 必知的十个 特性
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (WSI分类)WSI分类文献小综述 2024
  • (理论篇)httpmoudle和httphandler一览
  • (十六)Flask之蓝图
  • (一)基于IDEA的JAVA基础10
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)利用webkit抓取动态网页和链接
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .dwp和.webpart的区别
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 使用配置文件
  • .NetCore 如何动态路由
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .Net语言中的StringBuilder:入门到精通
  • .考试倒计时43天!来提分啦!
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @NoArgsConstructor和@AllArgsConstructor,@Builder