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

rabbitmq学习笔记快速使用

主要是快速了解使用,对于强要求比如说数据安全(也就是spring配置先不要求)

那么开始

引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId></dependency>

jackson依赖我们只要把他的序列化对象初始化给spring管理以后就可以对数据进行序列化和反序列化了,对比于spring的jdk序列化器,jackson更好用,性价比更强,内存占用更小。

//使用的是Jackson库中的Jackson2JsonMessageConverter类,代替使用jdk自带的序列化@Beanpublic MessageConverter jacksonMessageConvertor(){Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();jackson2JsonMessageConverter.setCreateMessageIds(true);//开启消息id的自动生成功能return jackson2JsonMessageConverter;}

然后是进行队列的声明,交换机的声明,以及队列和交换机的绑定的声明

@Configuration
public class RabbitMqConfig {private static String EXCHANGE_NAME="amq.topic";private static String QUEUE_NAME="alarm.data.topic.queue";private static String CONFIRM_ALARM_QUEUE_NAME="alarm.confirm.data.topic.queue";/*** 声明交换机*/@Beanpublic TopicExchange exchange(){// durable:是否持久化,默认是false// autoDelete:是否自动删除,当没有生产者或者消费者使用此交换机,该交换机会自动删除。return new TopicExchange(EXCHANGE_NAME,true,false);}/*** 声明告警队列* @return*/@Bean("alarmQueue")public Queue alarmQueue(){// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。return new Queue(QUEUE_NAME,true,false,false);}/*** 声明确认告警队列* @return*/@Bean("confirmAlarmQueue")public Queue confirmAlarmQueue(){return new Queue(CONFIRM_ALARM_QUEUE_NAME,true,false,false);}/*** 声明告警队列绑定关系* @param queue* @param topicExchange* @return*/@Beanpublic Binding alarmBinding(@Qualifier("alarmQueue") Queue queue, TopicExchange topicExchange){return BindingBuilder.bind(queue).to(topicExchange).with("server.event.#");}/*** 声明确认告警队列绑定关系* @param queue* @param topicExchange* @return*/@Beanpublic Binding confirmAlarmBinding(@Qualifier("confirmAlarmQueue") Queue queue, TopicExchange topicExchange){return BindingBuilder.bind(queue).to(topicExchange).with("server.event_confirm.#");}

首先是交换机的声明:

直接返回TopicExchange(name,true,false)即可交给spring管理。

然后第二个是是否持久化,第三个是没有使用直接删除。自然用true和false了

队列的声明:

/*** 声明告警队列* @return*/@Bean("alarmQueue")public Queue alarmQueue(){// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。return new Queue(QUEUE_NAME,true,false,false);}

直接new出来queue返回就可以了,我们使用的是rabbitmq里的队列而不是java里面的队列。选择new的时候选择rabbitmq的队列就可以了。

@param1是名字

2是否持久化 我们用true 

3是连接关闭后直接删除 我们用false

4没有使用该队列自动删除 我们用false

最后交给spring进行管理我们在后面使用的时候直接用就可以了。

用在哪里呢 用在交换机和队列进行连接时候用,这个时候用注释就可以快速拿到bean进行匹配然后返回连接了。

所以第三个就是交换机和队列的连接了

/*** 声明告警队列绑定关系* @param queue* @param topicExchange* @return*/@Beanpublic Binding alarmBinding(@Qualifier("alarmQueue") Queue queue, TopicExchange topicExchange){return BindingBuilder.bind(queue).to(topicExchange).with("server.event.#");}

使用@Qualifier找到bean然后赋值给Queue 然后使用BindingBuilder直接获取返回给spring管理。

最后那个参数是routingkey

然后是生产消息

@Autowiredprivate RabbitTemplate rabbitTemplate;private static String EXCHANGE_NAME="amq.topic";private static String CONFIRM_ALARM_QUEUE_NAME="alarm.confirm.data.topic.queue";@Testvoid producerAlarmMsg() {String msg = "发送一条告警消息";rabbitTemplate.convertAndSend(EXCHANGE_NAME, "server.event.#",msg);System.out.println("msg = " + msg);}@Testvoid producerConfirmAlarmMsg() {String msg = "发送一条确认告警消息";rabbitTemplate.convertAndSend(CONFIRM_ALARM_QUEUE_NAME, "server.event_confirm.#",msg);System.out.println("msg = " + msg);}

使用注解@rabbitTemplate里面的coverandsent方法,@param1是交换机名字 2是routingkey 3是消息 发送以后他会根据交换机自动去发送给对应的队列

然后是消费者

@Component
public class AlarmConsumer {@Autowiredprivate IAlarmService alarmService;@RabbitListener(queues ="alarm.data.topic.queue",concurrency = "5")public void getAlarmInfo(String data){alarmService.dealAlarmData(data);}@RabbitListener(queues ="alarm.confirm.data.topic.queue",concurrency = "5")public void getConfirmAlarmInfo(String data){alarmService.dealConfirmAlarmData(data);}
}

 使用@RabbitListner 第一个是队列的名字 而不是bean的名字 通过队列的名字进行监听 然后处理数据。 后面那个concurrency是并发数。

调用service里面的逻辑进行处理数据 

ok这就是rabbitmq的初步使用了。

http://www.xdnf.cn/news/367399.html

相关文章:

  • ROS导航局部路径规划算法
  • 第十五节:图像形态学操作-形态学梯度
  • AIGC理论基础:大模型通识
  • Oracle OCP认证考试考点详解083系列14
  • Vue项目中实现自定义连线图
  • 硬件实操技巧记录
  • Edu教育邮箱2025年5月亲测有效
  • 解锁蜘蛛池 SEO 优化:网站流量增长的高效引擎
  • 初等数论--欧拉函数及其性质
  • TLS 加密通信介绍
  • 机器学习 期末考试题
  • 鞋样设计软件
  • 【库(Library)、包(Package)和模块(Module)解析】
  • iOS App 下架了无法下载 ? 推荐个软件——IPADown
  • 【时时三省】(C语言基础)二维数组举例
  • 什么是硅二极管温度传感器
  • OptiStruct实例:声振耦合超单元应用
  • wordpress自学笔记 第二节: 3种独立站商城横幅的制作
  • linux0.11内核源码修仙传第十六章——获取硬盘信息
  • 【技术突破】CAN转Profinet:破解堆垛起重机智能互联的“密钥”
  • Python爬虫抓取Bilibili弹幕并生成词云
  • Qt 系统相关
  • 元强化学习
  • Django项目中不同app使用不同数据库的实现
  • MySQL主从同步(主从复制)
  • PPL困惑度的计算
  • 使用 NSSM 安装 Tomcat 11.0.6 为 Windows 服务
  • loop对象
  • 根据文件路径获取base64照片
  • 具身智能数据集解析