【RabbitMQ二】——RabbitMQ入门教程(简单模式)

news2025/1/16 8:05:13

RabbitMQ入门教程(简单模式)

  • 前言
  • RabbitMQ相关术语
  • RabbitMQ简单模式示例
  • 总结
  • 如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

前言

本篇博客主要是实现RabbitMQ最简单的模式,一个生产者,一个队列,一个消费者。通过本篇博客能够掌握RabbitMQ最基本的运用。
本篇博客主要学习至RabbitMQ官网的教程,RabbitMQ官网教程地址
入门教程选择最简单的模式,本篇博客选择的是Java语言
在这里插入图片描述

RabbitMQ相关术语

RabbitMQ是一个消息代理,RabbitMQ接收和转发消息。可以把它看做一个邮局,当你把邮件放进邮箱中,邮递员一定会将邮件邮递到接收邮件的人那里。在这个实例中,RabbitMQ可以是邮箱、邮局、和邮递员。

Producer(生产者):
一个发送消息的程序是一个生产者
在这里插入图片描述
queue(队列):
队列可以看做是一个邮箱,队列只受主机的内存和磁盘限制,它本质上是一个大的消息缓冲区。许多生产者可以向一个队列发送消息,许多消费者可以尝试从一个队列接收数据。
在这里插入图片描述
consumer(消费者):
一个主要等待接收消息的程序

RabbitMQ简单模式示例

**业务场景:**使用JAVA编写两个程序,一个生产者发送一条消息,一个消费者接受消息并把消息打印出来。

首先创建一个Maven项目在pom文件中引入RabbitMQ java client依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.10.0</version>
</dependency>

编写生产者Send.java类

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : Send
 * @description : [消息生产者类]
 * @createTime : [2023/1/13 8:21]
 * @updateUser : [WangWei]
 * @updateTime : [2023/1/13 8:21]
 * @updateRemark : [描述说明本次修改内容]
 */
public class Send {
    private final static String QUEUE_NAME = "hello";
    public static void main(String[] argv) throws Exception {
    	//创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //RabbitMQ服务器ip地址
        factory.setHost("ip");
        //端口号  默认值为5672
        factory.setPort(5672);
        //为用户分配的虚拟主机 默认值为/
        factory.setVirtualHost("/");
        //用户名  默认为guest
        factory.setUsername("用户名");
        //密码   默认为guest
        factory.setPassword("密码");
        //创建连接
        try (Connection connection = factory.newConnection();
        	//创建Channel
             Channel channel = connection.createChannel()) {
            //声明队列,声明一个队列是幂等的——它只会在它不存在的情况下被创建。
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            //生产的消息
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

编写消费者Recv.java类

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : Recv
 * @description : [消费者类]
 * @createTime : [2023/1/13 8:27]
 * @updateUser : [WangWei]
 * @updateTime : [2023/1/13 8:27]
 * @updateRemark : [描述说明本次修改内容]
 */
public class Recv {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        //创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //RabbitMQ服务器ip地址
        factory.setHost("ip");
        //端口号  默认值为5672
        factory.setPort(5672);
        //为用户分配的虚拟主机 默认值为/
        factory.setVirtualHost("/");
        //用户名  默认为guest
        factory.setUsername("用户名");
        //密码   默认为guest
        factory.setPassword("密码");
        
        //打开一个连接和通道,并声明队列
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        //这里也声明了队列。因为可能会在发布者之前启动消费者,所以我们希望在尝试从队列中消费消息之前确保队列存在。
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
		//我们要告诉服务器将队列中的消息传递给我们。因为它将异步地向我们推送消息,所以我们以对象的形式提供了一个回调,该回调将缓冲消息,直到我们准备好使用它们。这就是DeliverCallback子类所做的。
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
    }
}

运行生产者类生产消息,执行Send类中的Main方法,执行的结果图
在这里插入图片描述
访问RabbitMQ Web端,可以在queue中找到名为hello的队列,可以看到已经有一条消息在队列中了。
在这里插入图片描述
运行消费者类,消费这条消息,并将消息内容打印到控制台上。
在这里插入图片描述
再次访问RabbitMQ web端,可以在hello队列中看到消息已经被消费了。
在这里插入图片描述

总结

入门教程只是简单的运用,里面的具体细节是没有具体分析的。但是能够起到初步接触和使用RabbitMQ进行消息的存储、转发。

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

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

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

相关文章

【指针笔试题上】你知道大厂面试题的指针题是什么样的吗?快来通过这些面试题目检测一下自己吧!

目录 前言&#xff1a; 一.strlen和sizeof的区别 二.一维数组笔试题解析 三.二维数组笔试题解析 四.总结&#xff1a; 博客主页&#xff1a;张栩睿的博客主页 欢迎关注&#xff1a;点赞收藏留言 系列专栏&#xff1a;c语言学习 家人们写博客真的很花时间的&#xff0c;你们…

【自学Docker】一文解决Docker安装

Docker Centos安装 Docker版本 Docker 从 1.13 版本之后采用时间线的方式作为版本号&#xff0c;分为社区版CE和企业版EE。 Docker社区版是免费提供给个人开发者和小型团体使用的&#xff0c;企业版会提供额外的收费服务&#xff0c;比如经过官方测试认证过的基础设施、容器…

1.1 java 基础语法

目录 一、Java 基础语法 &#xff08;1&#xff09;对象&#xff1a; &#xff08;2&#xff09;类&#xff1a; &#xff08;3&#xff09;方法&#xff1a; &#xff08;4&#xff09;实例变量&#xff1a; 二、如何运行java程序&#xff08;前提是java的环境已经创建完…

19.Isaac教程--C语言接口(Isaac C API)

Isaac C API ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录Isaac C API程序流程和消息格式ROS示例独立示例启动和停止应用程序向 Isaac 应用程序发布消息从 Isaac 应用程序接收消息语言环境设置示例消息ImageProtoRangeScanProtoStateP…

C语言 八皇后(包含错误代码及分析)

基本思路&#xff1a;用递归思想解决&#xff0c;在8*8的棋盘放置8个皇后&#xff0c;则放置成功会每行有且仅有一个皇后&#xff08;因为皇后不能同行&#xff09;&#xff0c;所以可以循环行&#xff0c;尝试在某列放置&#xff0c;和 全排列 http://t.csdn.cn/kvIXC 的解决方…

vulnhub DC系列 DC-4

总结&#xff1a;爆破&#xff0c;teehee提权 目录 下载地址 漏洞分析 信息收集 密码爆破 命令执行 ​编辑 ssh爆破 提权 下载地址 DC-4.zip (Size: 617 MB)Download: http://www.five86.com/downloads/DC-4.zipDownload (Mirror): https://download.vulnhub.com/dc/D…

远程连接mysql报错:1130 - Host XXX is not allowed to connect to this MySQL server

问题描述 1130 - Host 123.120.193.96 is not allowed to connect to this MySQL server 译&#xff1a;不允许主机 123.120.193.96 连接到此 MySQL 服务器 远程连接的时候出现如下错误&#xff1a; 问题分析 根据描述提示&#xff0c;在用Navicat配置远程连接Mysql数据库时遇…

【Node.js】写一个数据自动整理成表格的脚本

前言 企业项目进行数据埋点后&#xff0c;埋点事件名需要整理成Excel表格便于统计&#xff0c;目标是将下图左侧数据转化成下图右侧的Excel表格&#xff1a; 考虑到左侧埋点数据是随项目迭代增加的&#xff0c;埋点数据每增加一次我就要把数据一条一条的CtrlC/V复制粘贴至Ex…

春节要放假了,外贸人你准备好了吗?

一转眼&#xff0c;老外们的假期即将结束&#xff0c;而我们的春节假期即将开启。有人会想&#xff1a;工作一年了&#xff0c;好不容易春节放个假&#xff0c;我是不是应该好好休息了&#xff1f;对别人是&#xff01;但是对于我们外贸人&#xff0c;并不是&#xff01;很多外…

第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)

1.砍竹子 1.题目描述 这天&#xff0c;小明在砍竹子&#xff0c;他面前有 nnn 棵竹子排成一排&#xff0c;一开始第 iii棵竹子的高度为 hihihi。 他觉得一棵一棵砍太慢了&#xff0c;决定使用魔法来砍竹子。 魔法可以对连续的一段相同高度的竹子使用&#xff0c;假设这一段…

数学基本算法

欧几里得算法 求两个数的最大公约数&#xff1a; /**** param a 整数* param b 整数* return 两个整数的最大公约数*/public static int gcd(int a,int b){return b0?a:gcd(b,a%b);} 扩展欧几里得 /*** * param a * param b (a,b)两个整数* param x * param y (x,y)…

LeNet5模型与全连接模型的差异

1 问题深度学习训练过程中&#xff0c;有很多的训练模型&#xff0c;我们组就在思考LeNet模型与之前运用的全连接模型在训练精度损失与验证精度损失上有什么差别&#xff1f;2 方法这是LeNet模型的主要代码&#xff0c;对数据进行两成卷积与两次池化之后再建立三成全连接即可。…

Oracle数据库的监控指标

一、Oracle 监控指标 Oracle数据库常见性能指标主要有:当前登录数、非阻塞锁数、当前死锁数、阻塞锁数、当前锁数、会话数等内容,如下图所示。 注意:以下是 Oracle 监控所需要的指标,具体根据需要监控哪些、超阈值而定。 1.1 新建主机群组 1.2 新建模板 1.3 创建主机 …

Qt 6.4.2在Windows上安装过程及简单验证

Qt是一个跨平台的C开发库&#xff0c;用来开发图形用户界面(Graphical User Interface, GUI)。它支持Windows、Linux、macOS、Android、iOS、QNX等平台&#xff0c;一个框架、一套代码库、任意平台部署。Qt有开源和商业两种许可。 Qt从5.15开始官方不再直接提供开源的exe…

H5——连连看小游戏实现思路及源码

部门要求推广新产品用连连看小游戏的方式&#xff0c; 设计那边UI还没有排期&#xff0c;先撸个功能demo&#xff0c;正好记录一下&#xff1b; 连连看都玩过&#xff0c;程序的关键在于判断连续点击的两张图片是否能够消除&#xff0c;两个图片消除的条件有两个&#xff1a; …

【3 - 特征工程】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

Blog Navigation

Blog Navigation Linux Kernel 0x01_LinuxKernel_内核的启动&#xff08;一&#xff09;之启动前准备[2022-7-5]0x02_LinuxKernel_内核的启动&#xff08;二&#xff09;SMP多核处理器启动过程分析 [TODO]0x21_LinuxKernel_内核活动&#xff08;一&#xff09;之系统调用 [20…

【OpenGL学习】OpenGL窗口创建

OpenGL窗口创建 本节介绍如何在利用配置好的GLFW和GLAD进行一个简单窗口的绘制&#xff0c;首先明白在OpenGL中进行图形绘制到窗口的整个流程&#xff1a; 初始化GLFW创建窗口window创建OpenGL上下文初始化Glad渲染循环结束绘制 初始化GLFW 然后我们从上面的流程逐步进行窗…

知微传感3D相机SDK开发文档一查找相机

知微传感3D相机SDK开发文档一查找相机 主要对知微传感3D相机的SDK文件做一个介绍&#xff0c;大家一个界面显示程序包含图像的获得&#xff0c;相机的查找和链接 查找相机&#xff0c;通过UDP广播形式查找局域网相机链接相机&#xff0c;通过IP地址链接局域网内的相机获取图片&…

如何提升计算机的运行速度-正确清理C盘的方法

本文是向大家介绍清理C盘的方法&#xff0c;它能够实现给系统盘瘦身&#xff0c;能够带来提升计算机运行速度价值。提升计算机的运行速度-清理C盘的方法1 利用Windows附带的磁盘清理工具鼠标右击【C盘】选择【属性】选择【磁盘清理】勾选需要清理的文件&#xff0c;点击【确定】…