rabbitmq使用总结

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.mfbz.cn/a/274741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PTA】L1-32 Left-pad (C++)

题目链接&#xff1a;L1-032 Left-pad 题目要求&#xff1a; 根据新浪微博上的消息&#xff0c;有一位开发者不满NPM&#xff08;Node Package Manager&#xff09;的做法&#xff0c;收回了自己的开源代码&#xff0c;其中包括一个叫left-pad的模块&#xff0c;就是这个模块…

MyBatis分页机制深度解析

前言 在企业项目的数据库操作中&#xff0c;分页查询是一个常见需求&#xff0c;尤其当数据量庞大时。MyBatis 作为 我们Java 开发者的持久层框架&#xff0c;为分页提供了灵活的支持。 本篇文章我们将深入探讨 MyBatis 的分页机制&#xff0c;使我们在实际开发项目中运用自如…

<JavaEE> TCP 的通信机制(三) -- 滑动窗口

目录 TCP的通信机制的核心特性 四、滑动窗口 1&#xff09;什么是滑动窗口&#xff1f; 2&#xff09;滑动窗口的作用是什么&#xff1f; 3&#xff09;批量传输出现丢包如何处理&#xff1f; 1> 接收端ACK丢包 2> 发送端数据包丢包 4&#xff09;适用性 TCP的通…

账号租号平台PHP源码,支持单独租用或合租使用

源码简介 租号平台源码&#xff0c;采用常见的租号模式。 平台的主要功能如下&#xff1a; 支持单独租用或采用合租模式&#xff1b; 采用易支付通用接口进行支付&#xff1b; 添加邀请返利功能&#xff0c;以便站长更好地推广&#xff1b; 提供用户提现功能&#xff1b;…

关于“Python”的核心知识点整理大全47

目录 16.1.10 错误检查 highs_lows.py highs_lows.py 16.2 制作世界人口地图&#xff1a;JSON 格式 16.2.1 下载世界人口数据 16.2.2 提取相关的数据 population_data.json world_population.py 16.2.3 将字符串转换为数字值 world_population.py 2world_population…

UWA社区年度大盘点

弹指间&#xff0c;2023年已接近尾声&#xff0c;这一年UWA社区为游戏行业开发者和期望步入游戏圈的学子们提供了多类型的社区服务&#xff0c;包括技术博客、问答、开源库、学堂、训练营、技术沙龙等。让我们一同回顾这一年来UWA的脚步&#xff0c;希望未来的每一步也都能有大…

2024年中职“网络安全“—数字调查取证(attack817.pcapng)

目录 ​1.通过分析数据包找出恶意用户最初访问HTTP服务的包号&#xff0c;将该值作为Flag值提交, Flag格式为flag{xxx}&#xff1b; 2.继续查看数据包文件分析出恶意用户扫描了哪些端口&#xff0c;将全部的端口号按照一定顺序作为Flag值&#xff0c;提示&#xff1a;注意端口…

什么是迁移学习(Transfer Learning)?定义,优势,方法

迄今为止&#xff0c;大多数人工智能&#xff08;AI&#xff09;项目都是通过监督学习技术构建的。监督学习是一种从无到有构建机器学习&#xff08;ML&#xff09;模型的方法&#xff0c;它对推动AI发展起到了关键作用。然而&#xff0c;由于需要大量的数据集和强大的计算能力…

传感器基础:传感器使用与编程使用(三)

目录 常用传感器讲解九--雨滴传感器具体讲解电路连接代码实现 常用传感器讲解十--光传感器根据亮度安排灯具体讲解电路连接代码实现 常用传感器讲解七--light cup&#xff08;KY-008&#xff09;具体讲解电路连接代码实现 常用传感器讲解十二--倾斜开关传感器&#xff08;KY-02…

数据探查系列:如何进行有意义的探索性数据分析(EDA)

如何进行有意义的探索性数据分析&#xff08;EDA&#xff09; 目录 1. 设置 1.1 导入库1.2 导入数据1.3 数据集特征1.4 数据集属性 2. 探索训练集和测试集 2.1 训练集 - 快速概览2.2 训练集 - 基本统计2.3 测试集 - 快速概览2.4 测试集 - 基本统计 3. 特征分布4. 数据不平衡检查…

LaTeX OCR本地部署的免费开源的科学公式提取工具pix2tex

pix2tex - LaTeX OCR简介 pix2tex 是一个免费开源的github项目,通过创建一个基于学习的系统,该系统可以获取数学公式的图像并返回相应的LaTeX代。Web端支持上传图片,提取公式,并转换为LaTeX格式,本地部署支持docker Web和python,本人测试docker成功,测试python 安装失败…

源码补丁神器—patch-package

一、背景 vue项目中使用 vue-pdf 第三方插件预览pdf&#xff0c;书写业务代码完美运行&#xff0c;pdf文件内容正常预览无问题。后期需求有变&#xff0c;业务需求增加电子签章功能。这个时候pdf文件的内容可以显示出来&#xff0c;但是公司的电子签章无法显示。这令人沮丧&am…

大哥你做科研 做它有啥用啊|2024元旦快乐

昨天晚上吃饭补乐夏&#xff0c;听到二手玫瑰说“大哥你玩摇滚&#xff0c;玩它有啥用”背后的故事。 emm怎么说呢&#xff0c;就是&#xff0c;我突然想到做科研也是这样&#xff0c;所以回办公室以后在桌面记了这句话。 听答辩&#xff0c;那些专家都会问 诶你做这个有什么…

Qt之自定义分页(翻页)控件

当数据量较大时,分页显示是个不错的选择。这里用百家姓来演示分页效果,包括首页、上一页、下一页、尾页和跳转。 一.效果 每页15个姓氏。 二.实现 QHPageWidget.h #ifndef QHPAGEWIDGET_H #define QHPAGEWIDGET_H#include <QWidget> #include <QStandardItemMod…

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果

最终效果 文章目录 最终效果素材第一人称人物移动开门效果显示原理渲染相机跟着我们视角移动门的摄像机跟着我们旋转近裁剪面设置传送配置代码实现传送效果结束完结素材 https://assetstore.unity.com/packages/3d/props/interior/door-free-pack-aferar-148411

c++输入输出流和文件操作总结

目录 一、c的输入输出流——> 指的是字节流的数据传送;具有类型安全和可扩展性。 二、流的出入路径 三、c流类库 ①概览 ②标准输出流&#xff1a; ③标准输入流&#xff1a; 四、文件操作&#xff08;ascii文件和二进制文件&#xff09; 五、字符串流&#xff08;或称…

Java在SpringCloud中自定义Gateway负载均衡策略

Java在SpringCloud中自定义Gateway负载均衡策略 一、前言 spring-cloud-starter-netflix-ribbon已经不再更新了&#xff0c;最新版本是2.2.10.RELEASE&#xff0c;最后更新时间是2021年11月18日&#xff0c;详细信息可以看maven官方仓库&#xff1a;org.springframework.clou…

uniapp 输入手机号并且正则校验

1.<input input“onInput” :value“phoneNum” type“number” maxlength“11”/> 3. method里面写 onInput(e){ this.phoneNum e.detail.value }, 4.调用接口时候校验正则 if (!/^1[3456789]\d{9}$/.test(this.phoneNum)) {uni.showToast({title: 请输入正确的手机号…

K8S网络类型

k8s的网络类型 k8s的通信模式 1 pod内部之间容器与容器之间的通信&#xff0c;在同一个pod中容器是共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信 2 同一个node节点之内&#xff0c;不同pod之间的通信&#xff0c;每个pod都有一个全局的真实ip地…

Qt学习:Qt的意义安装Qt

Qt 的简介 QT 是一个跨平台的 C图形用户界面应用程序框架。它为程序开发者提供图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正地组件编程。 支持平台 xP 、 Vista、Win7、win8、win2008、win10Windows . Unix/Linux: Ubuntu 等…