RabbitMQ 入门篇

news2024/11/14 0:36:32

接上一篇《RabbitMQ-安装篇(阿里云主机)-CSDN博客》

安装好RabbitMQ后,我们将开始RabbitMQ的使用,根据官网文档RabbitMQ Tutorials | RabbitMQ,我们一步一步的学习。

1. "Hello World!"

这里先说明几个概念:

生产者:指消息的发送方,用图例表示。

消费者:指消息的接收放,用图例表示。

队列(queue):生产者发送的消息将被传递到队列里,消费这从队列中消费消息

下面以 生产者 发送消息到队列,消费者从队列里消费消息为例,演示如何调用(Java代码)。

RabbitMQ支持多种协议。本教程使用AMQP0-9-1,它是一个开放的、通用的消息传递协议。

1.1 下载依赖项

下载客户端库客户端连接库及其依赖项(SLF4J API和SLF4J Simple)。将这些文件复制到您的工作目录中,连同教程Java文件。

1.2 生产者代码-Send.java

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

import java.nio.charset.StandardCharsets;

//生产者
public class Send {

    public static void main(String[] argv) throws Exception {
        // 创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("【服务器地址】");
        factory.setPort(【端口:默认5672】);
        factory.setUsername("【账号】");
        factory.setPassword("【密码】");
        factory.setVirtualHost("【虚拟主机】");

        // 创建信道,发送消息
        String queueName = "rc.queue";
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            channel.queueDeclare(queueName, true, false, false, null);
            String message = "Hello World!";
            channel.basicPublish("", queueName, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

请将代码中相关配置项设置为您自己的配置。

运行代码,即可向RabbitMQ中的rc.queue队列发送一条Hello World消息。(rc.queue为我自己创建的,请根据实际情况调整)

在RabbitMQ后台可以查看到该队列里的消息。

1.3 消费者代码-Recv.java

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.nio.charset.StandardCharsets;

//消费者
public class Recv {

    public static void main(String[] argv) throws Exception {
        // 创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("【服务器地址】");
        factory.setPort(【端口:默认5672】);
        factory.setUsername("【账号】");
        factory.setPassword("【密码】");
        factory.setVirtualHost("【虚拟主机】");

        // 创建连接通道
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        String queueName = "rc.queue";
        channel.queueDeclare(queueName, true, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), StandardCharsets.UTF_8);
            System.out.println(" [x] Received '" + message + "'");
        };
        channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {
        });
    }
}

运行结果

2.其他模式

调通了1种模式,其他模式类似的方式调试即可。RabbitMQ Tutorials | RabbitMQ

3.在Springboot中使用RabbitMQ  

3.1 添加依赖

pom.xml中添加Spring Boot的RabbitMQ依赖。

<!--RabbitMQ-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

 3.2 配置RabbitMQ

application.propertiesapplication.yml中配置RabbitMQ连接信息。

# application.properties
spring.rabbitmq.host=【服务器地址】
spring.rabbitmq.port=【端口:默认5672】
spring.rabbitmq.username=【用户名】
spring.rabbitmq.password=【密码】
spring:
  rabbitmq:
    host: 【服务器地址】
    port: 【端口:默认5672】
    username: 【用户名】
    password: 【密码】

 配置Queue、Exchange和Binding:

通过Java配置类定义消息队列、交换器和它们之间的绑定关系。

(如果在RabbitMQ控制台设置好了Queue、Exchange和Binding,无需下面的配置)

@Configuration
public class RabbitMQConfig {
 
    @Bean
    Queue myQueue() {
        return new Queue("your-queue-name", true);
    }
 
    @Bean
    DirectExchange myExchange() {
        return new DirectExchange("your-exchange");
    }
 
    @Bean
    Binding binding(Queue myQueue, DirectExchange myExchange) {
        return BindingBuilder.bind(myQueue).to(myExchange).with("your-routingKey");
    }
}

3.3 创建消息生产者

定义一个简单的消息生产者类,使用@RabbitTemplate注解来发送消息到队列:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageProducer {

    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public MessageProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("your-queue-name", message);
    }
}

3.4.创建消息消费者

定义一个消息消费者类,使用@RabbitListener注解来监听特定的队列:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {

    @RabbitListener(queues = "your-queue-name")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

3.5.启动和测试

确保你的应用启动类上有@EnableRabbit注解启用RabbitMQ。确保你的RabbitMQ服务正在运行,并尝试从你的应用中发送和接收消息。你可以通过调用MessageProducer中的sendMessage方法来测试发送功能,而接收功能应该自动触发MessageConsumer中的receiveMessage方法。

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

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

相关文章

电影票竞价系统:开发难度与代码规范全解析

电影票竞价系统成为了一种新兴的购票方式&#xff0c;它不仅提升了用户的购票体验&#xff0c;也为电影院带来了新的盈利模式。但是&#xff0c;这样一个系统的开发难度如何&#xff1f;代码又该如何规范&#xff1f;本文将一探究竟。 电影票竞价系统的开发难度 技术复杂性 …

【Android Studio】项目目录结构

文章目录 常用视图Android视图project视图 gradlebuild.gradleSDK 路径主题 常用视图 Android视图 project视图 gradle build.gradle SDK 路径 主题

怎么在电脑中创建虚拟的加密磁盘?

在电脑中创建虚拟的加密磁盘可以有效保护电脑数据&#xff0c;避免电脑数据泄露。那么&#xff0c;我们该怎么在电脑中创建虚拟的加密磁盘呢&#xff1f;下面我们就一起来了解一下吧。 BitLocker 在使用BitLocker加密虚拟磁盘前&#xff0c;我们需要使用虚拟磁盘工具创建一个虚…

Navicat最新版安装及免费使用教程(全网最靠谱,最简单~)

一、官网下载Navicat&#xff1a; Navicat | 下载 Navicat Premium 14 天免费 Windows、macOS 和 Linux 的试用版 二、百度网盘下载 链接: https://pan.baidu.com/s/1J-2ukx3NDTqvNoQsxnE1Jw 提取码: 5120 解压Navicat16和17补丁工具&#xff0c;然后双击执行压缩包文件中的&a…

分布式训练:大规模AI模型的实践与挑战

简介&#xff1a; 随着人工智能的发展&#xff0c;深度学习模型变得越来越复杂&#xff0c;数据集也越来越大。为了应对这种规模的增长&#xff0c;分布式训练成为了训练大规模AI模型的关键技术。本文将介绍分布式训练的基本概念、常用框架&#xff08;如TensorFlow和PyTorch&a…

企业源代码加密软件推荐,10款超好用的源代码加密软件排行榜

在现代软件开发中&#xff0c;源代码是企业的核心资产之一。保护源代码免受未经授权的访问和盗窃至关重要。源代码加密软件可以为企业提供额外的安全层&#xff0c;确保知识产权和商业秘密得到妥善保护。 1. 安秉源码加密软件 通过驱动层透明加密&#xff0c;确保开发人员在使…

ollama修改模型问答的上下文长度(num_ctx)

文章目录 一劳永逸版&#xff1a;修改模型参数临时抱佛脚之命令行生效临时抱佛脚之API生效没啥卵用之OpenAI API传参没啥卵用之OpenAI 问答传参 在使用ollama做大模型问答的过程中&#xff0c;发现存在着当输入问题过长之后&#xff0c;模型无法回答的问题。经过查询资料&#…

做一个图片马(图片木马)的四种方法 小白也能看会(详细步骤 ) 需要.htaccess等执行图片内代码

简介 图片马:就是在图片中隐藏一句话木马。利用.htaccess等解析图片为PHP或者asp文件。达到执行图片内代码目的 4种制作方法: 文本方式打开,末尾粘贴一句话木马 cmd中 copy 1.jpg/b2.php 3.jpg 16进制打开图片在末尾添加一句话木马。 ps 注意以下几点: 单纯的图片马并不…

TCP/IP_TCP协议

目录 一、TCP协议 1.1 确认应答 1.2 超时重传 1.3 连接管理 1.4 TCP状态 1.5 滑动窗口 1.6 流量控制 1.7 拥塞控制 1.8 延迟应答 1.9 捎带应答 1.10 粘包问题 1.11 异常情况 二、TCP/UDP对比 总结 一、TCP协议 TCP 协议和 UDP 协议是处于传输层的协议。 【TCP协…

WEB服务器的详解与部署

WEB服务器也称为网页服务器或HTTP服务器 WEB服务器使用的协议是HTTP或HTTPS HTTP协议默认端口号&#xff1a;TCP 80 HTTPS协议默认端口号&#xff1a;TCP 443 浏览器其实就是 HTTP 客户端 WEB服务器发布软件 微软&#xff1a;IIS(可以发布web网站和FTP站点)linux&#x…

Java:多线程(进程线程、线程状态、创建线程、线程操作)

1&#xff0c;线程概述 1.1&#xff0c;进程和线程 并发是指系统能够同时处理多个任务或操作&#xff0c;通常通过在单个处理器或多个处理器之间快速切换上下文来实现。这些任务可能不是同时进行的&#xff0c;但是它们在时间上重叠。 并行是指系统同时执行多个任务或操作&…

tkinter绘制组件(42)——工具栏按钮组件

tkinter绘制组件&#xff08;42&#xff09;——工具栏按钮组件 引言布局函数结构背景板创建按钮移动背景板完整代码函数 效果测试代码最终效果 github项目pip下载结语 引言 在TinUI中&#xff0c;并不存在工具栏这个概念&#xff0c;但是可以通过使用BasicTinUI控件&#xff…

第二证券:港股交易规则有哪些?

港股的生意规矩&#xff1a; 1、港股生意时间&#xff1a;港股商场的生意时间分为上午和下午两个时段&#xff0c;上午的生意时间通常是9:30至12:00&#xff0c;而下午的生意时间则是13:00至16:00。需求留心的是&#xff0c;港股在周末及法定节假日会休市&#xff0c;此外恶劣…

ECC加密算法:一种高效且安全的加密技术

ECC&#xff08;Elliptic Curve Cryptography&#xff09;&#xff0c;即椭圆曲线密码算法&#xff0c;是一种基于椭圆曲线数学理论的公钥加密算法。自1985年由Neal Koblitz和Victor S. Miller分别独立提出以来&#xff0c;ECC凭借其独特的数学原理和高效的性能&#xff0c;逐渐…

【数据结构】大根堆和小根堆

大根堆实现逻辑 从整棵树的最后一颗子树开始调整&#xff0c;每次都让根节点和左右孩子去比较&#xff0c;如果根节点比左右孩子的最大值要小&#xff0c;那么就将这两个值进行交换&#xff0c;然后此时这颗子树变成了大根堆&#xff0c;再看下一颗树 然后对下一颗树进行相同…

【大模型框架】【基本结构】transformer

论文地址:https://arxiv.org/pdf/1706.03762 1. 整体结构 2. 内部结构 3. 公式 Transformer工作原理四部曲:Embedding(向量化)、Attention(注意力机制)、MLPs(多层感知机)和Unembedding(模型输出)。

域名过期了网站还能访问吗?怎么查询域名过期?

在当今数字化的时代&#xff0c;网站已经成为企业、个人展示形象和提供服务的重要窗口。而域名作为网站的标识&#xff0c;其重要性不言而喻。然而&#xff0c;域名是有一定有效期的&#xff0c;那么当域名过期了&#xff0c;网站还能访问吗&#xff1f;又该如何查询域名的过期…

Mysql的事务隔离级别实现原理

一、事务隔离级别 mysql支持四种事务隔离级别&#xff1a; 读未提交&#xff1a;一个事务可以读取到另一个事务还未提交的数据&#xff1b;读已提交&#xff1a;一个事务可以读取到另一个事务已经提交的数据&#xff1b;可重复读&#xff1a;同一个事务中&#xff0c;无论读取…

【C语言】数组和函数实践:扫雷游戏

扫雷游戏 1. 扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 ⽂件结构设计 2. 扫雷游戏的代码实现&#xff08;1&#xff09;菜单menu函数&#xff08;2&#xff09;设计main函数&#xff08;3&#xff09;设计game函数&#xff08;4…