03 RabbitMQ:HelloWorld

news2025/1/20 18:33:44

03 RabbitMQ:HelloWorld

  • 1. 目标
  • 2. 实现
    • 2.1. 新建Spring Boot 项目
      • 2.1.1. 新建生产者(producer)项目
      • 2.1.2. 新建生产者(consumer)项目
    • 2.2. 导入依赖
    • 2.3. 代码
      • 2.3.1. 发送消息(producer)
      • 2.3.2. 接收消息(consumer)

在这里插入图片描述

1. 目标

用Java代码实现简单的 生产者发送消息,消费者接收消息
在这里插入图片描述
官网说明参见超链接:RabbitMQ tutorial - “Hello World!” | RabbitMQ

2. 实现

2.1. 新建Spring Boot 项目

2.1.1. 新建生产者(producer)项目

省略

2.1.2. 新建生产者(consumer)项目

在这里插入图片描述

2.2. 导入依赖

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

2.3. 代码

2.3.1. 发送消息(producer)

package com.eyesmoon.producer.demo;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @Description: 生产者
 * @Author: M.
 * @Date: 2024-07-30 16:40
 */
public class Producer {

    private static final String QUEUE_NAME = "simple-queue";
    private static final String EXCHANGE_NAME = "";
    private static final String ROUTING_KEY = "simple-queue";
    public static void main(String[] args) {
        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置主机地址
        connectionFactory.setHost("192.168.188.129");
        // 设置连接端口号:默认为 5672
        connectionFactory.setPort(5672);
        // 虚拟主机名称:默认为 /
        connectionFactory.setVirtualHost("/");
        // 设置连接用户名;admin
        connectionFactory.setUsername("admin");
        // 设置连接密码;123456
        connectionFactory.setPassword("123456");

        try (// 创建连接
             Connection connection = connectionFactory.newConnection();
             // 创建频道
             Channel channel = connection.createChannel()){

            /**
             * 声明(创建)队列
             * 参数1:队列名称
             * 参数2:是否定义持久化队列(当 MQ 重启之后还在)
             * 参数3:是否独占本次连接(若独占,只能有一个消费者监听这个队列且 Connection 关闭时删除这个队列)
             * 参数4:是否在不使用的时候自动删除队列(就是在没有Consumer时自动删除)
             * 参数5:队列其它参数
             */
            channel.queueDeclare(QUEUE_NAME, true, false, false, null);

            /**
             * 发送消息:消息内容
             */
            String message = "你好,小兔子!";

            /**
             * 参数1:交换机名称,如果没有指定则使用默认Default Exchange
             * 参数2:路由key,简单模式可以传递队列名称
             * 参数3:配置信息
             * 参数4:消息内容
             */
            channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes());
            System.out.println("生产者(Producer)已发送消息:" + message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
页面查看:
详细参数请查看 04 RabbitMQ:控制界面详解
Ready变为了1,说明消息已经存放在队列中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.2. 接收消息(consumer)

package com.eyesmoon.consumer.demo;

import com.rabbitmq.client.*;
import java.nio.charset.StandardCharsets;

/**
 * @Description: 消费者
 * @Author: M.
 * @Date: 2024-07-30 17:59
 */
public class Consumer {

    private static final String QUEUE_NAME = "simple-queue";
    public static void main(String[] args) {
        // 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 设置主机地址
        connectionFactory.setHost("192.168.188.129");
        // 设置连接端口号:默认为 5672
        connectionFactory.setPort(5672);
        // 虚拟主机名称:默认为 /
        connectionFactory.setVirtualHost("/");
        // 设置连接用户名;admin
        connectionFactory.setUsername("admin");
        // 设置连接密码;123456
        connectionFactory.setPassword("123456");

        try (// 创建连接
             Connection connection = connectionFactory.newConnection();
             // 创建频道
             Channel channel = connection.createChannel()){

            // 接收消息
            DefaultConsumer consumer = new DefaultConsumer(channel) {
                /**
                 * 回调方法,当收到消息后,会自动执行该方法
                 * @param consumerTag 标识
                 * @param envelope 获取一些信息,交换机,路由key...
                 * @param properties 配置信息
                 * @param body 数据
                 */
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) {
                    System.out.println("consumerTag:" + consumerTag);
                    System.out.println("Exchange:" + envelope.getExchange());
                    System.out.println("RoutingKey:" + envelope.getRoutingKey());
                    System.out.println("properties:" + properties);
                    System.out.println("body:" + new String(body, StandardCharsets.UTF_8));
                }
            };
            /**
             * 监听消息
             * 参数1:队列名称
             * 参数2:是否自动确认(类似咱们发短信,发送成功会收到一个确认消息)
             * 参数3:回调对象
             */
            channel.basicConsume(QUEUE_NAME,true, consumer);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

页面查看:
详细参数请查看 04 RabbitMQ:控制界面详解
Ready变为了0,说明消息已经被消费。消息在队列中已经被删除。
在这里插入图片描述
在这里插入图片描述


本文隶属于 【个人专栏】:06 RabbitMQ 📋📋📋
到这里 03 RabbitMQ:HelloWorld 就结束了!!!🎉🎉🎉
后续接 04 RabbitMQ:控制界面详解 📣📣📣
欢迎小伙伴们学习和指正!!!😊😊😊
祝大家学习和工作一切顺利!!!😎😎😎

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

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

相关文章

TiKV Raft 快照全流程丨TiKV 源码解读(二十二)

导读 TiKV 是一个支持事务的分布式 Key-Value 数据库&#xff0c;目前已经是 CNCF 基金会的顶级项目。它通过 Raft 协议实现数据的高可用性和强一致性&#xff0c;是 TiDB 分布式数据库系统的重要组成部分。本文作为 TiKV 源码解读系列的增补&#xff0c;详细介绍了 TiKV 8.2.…

2024华数杯C题保姆级分析完整思路+代码+数据教学

2024华数杯C题保姆级分析完整思路代码数据教学 C题题目&#xff1a;老外游中国 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 1 总体分析&#xff1a; 题目要求本题目基于中国境内旅游景点数据&#xff0c;旨在通过数学建模解决外国游客在中国旅游时可能遇到的…

安装pytorch GPU方法

参考全网最详细的安装pytorch GPU方法&#xff0c;一次安装成功&#xff01;&#xff01;包括安装失败后的处理方法&#xff01;-CSDN博客 整体来看&#xff0c;一共下面三个安装步骤&#xff1a; 显卡驱动&#xff08;nvidia-smi&#xff09;-》显卡深度学习驱动&#xff08…

三十种未授权访问漏洞复现 合集( 四 )

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷&#xff0c;导致其他用户可以直接访问&#xff0c;从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…

日志系统——整体框架

日志等级模块&#xff1a; 该模块描述了日志消息的各种等级debug,info,warn,error,fatal,off&#xff08;off为最高等级&#xff0c;屏蔽一切日志消息&#xff09;,并提供描述日志等级的方法 日志消息模块: 该模块负责构建日志消息对象&#xff0c;此对象管理着一条日志中的各项…

【Python网络爬虫案例】python爬虫之爬取豆瓣电影信息

&#x1f517; 运行环境&#xff1a;PYTHON &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

【C语言】计算四则运算,中缀表达式转换为后缀表达式

C语言编程—中缀表达式转换为后缀表达式 思路&#xff1a; 中缀转后缀保存结果栈&#xff1a;stack&#xff0c;保存数据和-*/ 操作符栈&#xff1a;op_stack&#xff0c;保存-*/() 场景一&#xff1a;遇到数据&#xff0c;直接入栈stack 场景二&#xff1a;遇到"(&qu…

海康笔试题

1. 2. 块设备&#xff1a;磁盘设备驱动、SD设备驱动 字符设备&#xff1a;终端设备驱动 网络设备&#xff1a;网络设备驱动 &#xff08;1&#xff09;linux操作系统驱动程序分为三大类&#xff1a;字符设备驱动、快设备驱动和网络设备驱动 &#xff08;2&#xff09;字符设…

2024 年华数杯全国大学生数学建模竞赛C 题 老外游中国 完整思路 源代码 模型结果(仅供学习)

最近&#xff0c;“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实&#xff0c;越来越多外国游客来到中国&#xff0c;通过网络平台展示他们在华旅行的见闻&#xff0c;这不仅推动了中国旅游业的发展&#xff0c;更是在国际舞台上展现了…

基于X86+FPGA助力实现电力系统的智能监测与高效管理

电力监控 信迈提供基于Intel平台、Xilinx平台、Rockchip平台、NXP平台、飞腾平台的Mini-ITX主板、Micro-ATX主板、ATX主板、嵌入式准系统/工业整机等计算机硬件。产品算力强大&#xff0c;支持高速存储&#xff0c;提供丰富串口、USB、LAN、PCIe扩展接口、显示接口等I/O接口&am…

【python】数据类型之列表类型(上)

本篇文章将讲解列表类型。 列表&#xff08;list&#xff09;&#xff0c;是一个有序且可变的容器&#xff0c;在里面可以存放多个不同类型的元素。 列表中的元素之间用逗号&#xff08;英文中的逗号&#xff09;相隔。 1、定义&#xff1a; 例如&#xff1a; user_list[]…

stl容器 vector的基本操作

目录 1.vector构造 1.1默认构造函数 1.2 fill 填充构造函数 ​编辑 1.3 范围构造函数&#xff08;Range Constructor&#xff09; 1.4拷贝构造函数 2.initializer_list初始化vector 3.迭代器 4.常用的几个成员 4.1 size()统计当前有效字符个数 4.2 capacity ve…

青甘环线游记|day(2)|西宁、青海湖

坐动车 早上7:30醒来&#xff0c;在8:00左右起床&#xff0c;下楼吃兰州拉面。面煮的很好吃&#xff0c;就是还是不是很适应。看到8元的牛肉面感觉很震惊&#xff0c;没想到是面8元&#xff0c;牛肉另加&#xff0c;10元。 坐上动车前往西宁&#xff0c;12点左右到了。虽然在…

PXE实现自动安装部署操作系统

PXE&#xff08;Preboot eXecution Environment&#xff09;是一种在计算机启动时使用网络接口从远程服务器获取操作系统安装和启动信息的技术。通过PXE&#xff0c;计算机可以从局域网中的PXE服务器上下载操作系统安装文件&#xff0c;并进行自动化的操作系统部署或故障排除。…

25考研数据结构复习·7.4B树和B+树7.5散列(Hash)表

目录 B树和B树 B树 m阶B树的核心特性 B树的插入 B树的删除 非终端结点关键字 终端结点关键字 低于下限 B树 散列&#xff08;Hash&#xff09;表 基本概念 散列函数的构造 &#x1f469;‍&#x1f4bb; 除留余数法 直接定址法 数字分析法 平方取中法 处理冲突…

动手学深度学习V2每日笔记(池化层)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1EV411j7nX/spm_id_from333.999.0.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&#xff0c;内容不会特别…

Linux基础环境开发工具(二)

目录 一、前言二、make和makefile工具1.快速认识一下2.依赖关系和依赖方法3.执行原理 三、Git工具1.快速认识一下2.git的使用 四、gdb工具1.快速认识一下2、类比Windows使用 一、前言 在开发工具第一篇中我们介绍了yum&#xff0c;vim&#xff0c;gcc/g编译器这几种工具&#…

C++ 继承 派生类的拷贝构造

继承 派生类的拷贝构造构造顺序拷贝构造 引例1: 当子类,不自实现拷贝构造时,默认调用父类的拷贝构造引例2: 子类自实现拷贝构造,不做特殊处理时,只会调用父类的构造器.引例3: 显示的调用父类的拷贝构造器。案例: 内嵌函数的拷贝构造 引例1 :当内嵌子对象,子类不自实现拷贝构造时…

Netty二

Netty 问题分析 bootstrap serverBootstrap pipeline和channelPipeline EventLoopGroup和实现类NioEventLoopGroup

U2net论文复现-简单解读-以及奇奇怪怪的改进-测试roc以及pr

论文地址&#xff1a;U2net论文地址 显著性目标检测&#xff1a; Salient ObjectDetetion(SOD)显著性目标检测&#xff0c;就是要把图片中最显著的物体分割出来&#xff0c;所以是二分类任务&#xff0c;只需要背景和前景。 1、Introduce 1.1、目前存在的2个挑战&#xff1…