rabbitmq使用总结

news2024/11/27 8:29:14

1、进入rabbitmq的sbin目录,进入CMD

2、输入./rabbitmq-plugins enable rabbitmq_management启用管理服务。

3、输入./rabbitmqctl start_app启动服务。

查看是否启动成功

1、浏览器访问http://localhost:15672/

下载erlang

地址如下:

http://erlang.org/download/otp_win64_20.3.exe

找到 otp_win64_20.3.exe,以管理员方式运行此文件,安装。

erlang安装完成需要配置erlang环境变量:

这两个都加入到系统盘中去

ERLANG_HOME=D:\Program Files\erl9.3

在path中添加%ERLANG_HOME%\bin;

2)安装RabbitMQ

https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.7.3

找到 rabbitmq-server-3.7.3.exe,以管理员方式运行此文件,安装。

 普通java 项目的依赖
 <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>4.0.3</version>
        </dependency>
TOPIC 模式 也就是路由模式  
p  提供了准确的路径
c  提供了大概得路径   来消费数据

Confirm 确认消息 用在 p -> ex 上面的 先连同 以后在上传数据,两上去发送失败就会触发这个机制

 channel.confirmSelect(); // 开启监听 可能不止一个管道
 
 channel.addConfirmListener(new ConfirmListener() {
            public void handleAck(long l, boolean b) throws IOException {
                System.out.println(l);
                System.out.println(b);
                System.out.println("确认获取...");
            }
​
            public void handleNack(long l, boolean b) throws IOException {
                System.out.println(l);
                System.out.println(b);
                System.out.println("未获取...");
            }
        });

retrun 消息机制

   // 执行失败的时候添加的返回数据  成的时候什么都不会 这里是它自己的bug
        channel.addReturnListener(new ReturnListener() {
            public void handleReturn(int i, String s, String s1, String s2, AMQP.BasicProperties basicProperties, byte[] bytes) throws IOException {
                String str = new String(bytes, "UTF-8");
                System.out.println("没有路由成功的数:" + str);
            }
        });

消费端的限流

channel.basicQos(2); // 每次消费两条数据  限流策略关键代码
// 开启acKnowledge验证数据 读出数据单未消费掉
channel.basicConsume("myqosqu", false, consumer);

消费端的ACK与重回队列 (消费端)

// 手动消费 
channel.basicAck(envelope.getDeliveryTag(),false);
  // 两个参数 获取每一条消费的对象id  不配量处理
/
// 手动不消费  也不返回队列(false) true 是返回队列那就死循环了,一直在处理这条数据
 channel.basicNack(envelope.getDeliveryTag(),false,true);

有效时间 (p)

AMQP.BasicProperties properties = new AMQP.BasicProperties()
                .builder()
                .deliveryMode(2)// 设置消息是否持久化,1: 非持久化 2:持久化
                .contentEncoding("UTF-8")
                .expiration("10000")
                .build();
// p 端的数据 第三个参数来设置有效时间
hannel.basicPublish("myoneEx", "myoneAs", properties, smsMsg.getBytes());

死信队列

  Map<String, Object> param = new HashMap<String, Object>(); //创建一个死信队列 
        param.put("x-dead-letter-exchange", "mytwoEx");
   
        channel.exchangeDeclare("myoneEx", BuiltinExchangeType.DIRECT);
// 如果出现问题就放到第二交换机上面去(在队列上设置属性的)
        channel.queueDeclare("myoneQu", true, false, false, param);

springboot 的使用

 -- 相关依赖
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
  </dependency>

这里是springboot一些注解,防止自己忘记,在此查阅了一些资料

@Bean不仅可以作用在方法上,也可以作用在注解类型上,在运行时提供注册。
​
value:name属性的别名,在不需要其他属性时使用,也就是说value 就是默认值
name:此bean 的名称,或多个名称,主要的bean的名称加别名。如果未指定,则bean的名称是带注解方法的名称。如果指定了,方法的名称就会忽略,如果没有其他属性声明的话,bean的名称和别名可能通过value属性配置
autowire :此注解的方法表示自动装配的类型,返回一个Autowire类型的枚举,我们来看一下Autowire枚举类型的概念

当使用在类上的时候,如下代码,@Qualifier注解里面填写的值就是当前类注入到IOC容器的bean的唯一标识(id),再使用到该Bean的地方就可以直接根据唯一标识(id)从IOC容器中获取了

当使用在属性上的时候,如下代码,@Qualifier 和 @Autowired结合使用可以通过唯一Bean的id实现自动装配,因为单独的@Autowired注解实现自动装配是按照类型优先原则的,一旦IOC容器中出现了两个类型一样的Bean,@Autowired注解就会无法辨别用那个,即而报错,但是当我们加上 @Qualifier(value = "Bean的id") 的时候就可以直接通过Bean的唯一标识(id)进行装配了。

@RabbitListener注解既可以加在类上,也可以加在方法上,其作用有所不同。

正如上面讲的,当@RabbitListener注解加在类上时,表示该类是一个RabbitMQ消息监听器容器,可以包含多个带有@RabbitHandler注解的方法,用于处理不同类型的消息。例如:

@RabbitListener(queues = MQConfig.PAYQUEUE)
public class MQListener{
     @RabbitHandler // 这里处理多个类型的数据
     public void revicePaySuccess(String orderNo){
     
     }
}

因此,@RabbitListener注解加在类上时,表示该类是一个消息监听器容器,可以包含多个处理不同类型消息的方法;而加在方法上时,表示该方法是一个消息监听器,只用于处理特定类型的消息。

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

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

相关文章

三张表看懂POE POE+ POE++ 三个协议的相关参数

Hqst华强盛&#xff08;盈盛电子&#xff09;导读&#xff1a;三张表看懂POE POE POE 三个协议的相关参数。 一 ̖ POE协议区分&#xff1a; 802.3af&#xff08;PoE) 百兆网络变压器H81621S 二 ̖ POE协议与受电设备&#xff08;PD&#xff09;工作功率分级 802.3at&#xf…

使用MySQL进行数据库表的基本操作

参考文章 http://www.ksqn.cn/news/1325.html 1. 创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名datatype 表示列的类…

图片水印怎么去除?推荐三个去水印的方法

在我们搜集和整理图片素材的过程中&#xff0c;总会遇到一个让人头疼的问题——水印。这些水印不仅破坏了图片的整体美感&#xff0c;还极大地限制了图片的使用范围。然而&#xff0c;好消息是&#xff0c;我们并非束手无策&#xff0c;有多种方法可以帮助我们去除这些水印&…

Android 理解Context

文章目录 Android 理解ContextContext是什么Activity能直接new吗&#xff1f; Context结构和源码一个程序有几个ContextContext的作用Context作用域获取ContextgetApplication()和getApplicationContext()区别Context引起的内存泄露错误的单例模式View持有Activity应用正确使用…

OpenCV-Python(29):图像特征

目录 目标 背景介绍 常用特征 应用场景 目标 理解什么是图像特征 为什么图像特征很重要 为什么角点很重要 背景介绍 相信大多数人都玩过拼图游戏吧。首先你们拿到一张图片的一堆碎片&#xff0c;你要做的就是把这些碎片以正确的方式排列起来从而重建这幅图像。问题是&…

模拟电路基础知识笔记,你想知道的都有,建议收藏!

大家总说模电知识总是学不会&#xff0c;IC修真院为大家整理了模拟电子基础知识&#xff0c;看看你掌握了多少&#xff0c;文末可以获取全部哦。 文末可领全部文档 1、PN结是晶体二极管的基本结构&#xff0c;也是一般半导体器件的核心。 2、 射极输出器没有电压放大能力&am…

SD NAND 异常上下电测试

SD NAND 异常上下电测试的作用 SD NAND 异常上下电测试是一项关键的测试步骤&#xff0c;对确保SD NAND在不同电源条件下的稳定性和可靠性至关重要。 通过模拟正常和异常电源情况&#xff0c;测试可以验证设备的电源管理功能、检测潜在错误和异常行为&#xff0c;并评估设备在…

怎么快速去除图片水印?这些快速去除的工具赶紧码住

在数字时代的大潮中&#xff0c;图片与视频中的水印如同微小的瑕疵&#xff0c;虽然旨在维护原创者的权益&#xff0c;却往往损害了内容的观感&#xff0c;降低了他人的分享欲望。那些恼人的水印&#xff0c;常常让人们束手无策。但别担心&#xff0c;接下来我将为你揭秘几种快…

数字化时代背景下服装表演创新研究

服装表演是一门独具魅力的艺术,它既高于生活,又来源于生活。这一艺术形式通过舞台上的服装、音乐、舞蹈和表演艺术家的表现力,将时尚与创意融为一体,向观众传递着独特的美感和情感。然而,如今,我们生活在一个飞速发展的数字化时代,这为服装表演的教育带来了前所未有的机遇和挑战…

英文建筑图纸翻译工程图纸翻译

建筑图纸是以图形和文字为语言&#xff0c;详细描绘了工程建筑、机械、设备等结构、形状、尺寸及其他要求。对于建筑图纸翻译&#xff0c;表达必须清楚准确。那么&#xff0c;如何确保英文建筑图纸翻译工程图纸翻译的准确性&#xff1f; 首先&#xff0c;我们需要深入了解建筑图…

使用 pytest 相关特性重构 appium_helloworld

一、前置说明 在 pytest 基础讲解 章节,介绍了 pytest 的特性和基本用法,现在我们可以使用 pytest 的一些机制,来重构 appium_helloworld 。 appium_helloworld 链接: 编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来 代码目录结构: pytest.ini 设置: [pyt…

【C语言】程序练习(三)

大家好&#xff0c;这里是争做图书馆扫地僧的小白。非常感谢各位的支持&#xff0c;也期待着您的关注。 目前博主有着C语言、C、linux以及数据结构的专栏&#xff0c;内容正在逐步的更新。 希望对各位朋友有所帮助同时也期望可以得到各位的支持&#xff0c;有任何问题欢迎私信与…

【Leetcode 39】组合总和 —— 回溯法

39. 组合总和 给你一个无重复元素的整数数组candidates和一个目标整数target &#xff0c;找出candidates中可以使数字和为目标数target的 所有不同组合&#xff0c;并以列表形式返回。你可以按**任意顺序 **返回这些组合。 candidates中的同一个数字可以 无限制重复被选取 。…

畅捷通的 Serverless 探索实践之路

作者&#xff1a;计缘&#xff0c;阿里云云原生架构师 畅捷通介绍 畅捷通是中国领先的小微企业财税及业务云服务提供商&#xff0c;成立于 2010 年。畅捷通在 2021 年中国小微企业云财税市场份额排名第一&#xff0c;在产品前瞻性及行业全覆盖方面领跑市场&#xff0c;位居中…

百万数据集测试赛题秒级查询的MySQL方案

目录 比赛题目 最佳解法 solution_row prime_encoded 相关知识 递归 CTE SUBSTRING_INDEX 引用资料 比赛题目 有一张表 cards&#xff0c;id 是自增字段的数字主键&#xff0c;另外有4个字段 c1,c2,c3,c4 &#xff0c;每个字段随机从 1~10 之间选择一个整数&#xff…

十二:爬虫-Scrapy框架(上)

一&#xff1a;Scrapy介绍 1.Scrapy是什么&#xff1f; Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架(异步爬虫框架) 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫&#xff0c;抓取指定网站的内容或图片 Scrapy使用了Twisted异步网…

多平面包络的圆柱体参数估计

多平面包络的圆柱体参数估计 场景 现有多个空间平面包络一个柱体&#xff0c;从圆柱顶端俯视如图所示&#xff1a; 中心位置为圆柱实际所在位置。现在已知这些平面的参数&#xff08;每个平面的方程均为axbyczd0形式, 参数为a,b,c,d&#xff09;&#xff0c;希望求解它们包络…

阿里云oss无法访问.apk或者.ipa的文件

-- 有意栽花花不发 无心插柳柳成荫 0048-00000201 更新时间&#xff1a;2023-07-19 10:31:16 问题描述 在2023年08月15日后为Bucket开通传输加速&#xff0c;如果通过OSS传输加速域名访问其中后缀为.apk或者.ipa的文件&#xff0c;服务器返回400错误。 问题原因 出于安全…

分布式IO在工业自动化中的应用

传统的自动化产线及物流系统主要是利用PLC来处理数据&#xff0c;并将这些数据保存在PC当中。但是随着互联网技术的迅速发展&#xff0c;越来越多的系统集成商利用分布式IO模块&#xff0c;实现从控制器到自动化最底层之间的IO通信。 分布式IO在工业自动化中的应用 分布式IO是用…

再次被gpt震撼到了,md转json

1.md内容来自excel 参考链接&#xff1a; https://chat.xutongbao.top/