当前位置: 首页 > news >正文

Java使用RabbitMQ的详细教程(原生框架)

RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件,它使用Erlang编程语言编写,具有高并发、分布式、可靠性强等特点,非常适合用于构建分布式消息中间件。Java可以通过RabbitMQ的客户端库与其进行通信,实现消息的发送和接收。以下是一个Java使用RabbitMQ的详细教程:

一、安装RabbitMQ

  1. 在线安装

    • 使用Docker安装RabbitMQ,命令为docker pull rabbitmq:management
    • 使用官方定义的端口号启动RabbitMQ,命令为docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
  2. 查看图形化界面

    • 创建一个Virtual Host,它相当于RabbitMQ上的虚拟机。
    • 创建一个全新的用户和全新的Virtual Host,并设置用户权限。

二、Java项目配置

  1. 添加依赖

    • 在Java项目中,可以通过Maven或Gradle来管理项目依赖。例如,使用Maven时,可以在pom.xml文件中添加以下依赖:

      <dependency>  <groupId>com.rabbitmq</groupId>  <artifactId>amqp-client</artifactId>  <version>5.12.0</version>  
      </dependency>
  2. 创建连接

    • 创建一个连接工厂对象,并设置连接参数,包括RabbitMQ服务器的地址、用户名和密码等。
    • 使用连接工厂创建一个连接对象。

三、发送和接收消息

  1. 创建队列

    • 在发送和接收消息之前,需要先创建一个队列。可以使用连接对象创建一个通道(Channel),并通过通道创建队列。
  2. 发送消息

    • 要发送消息到队列中,需要先创建一个BasicProperties对象,并设置消息的属性,如内容类型、持久化模式等。
    • 使用通道对象的basicPublish方法发送消息到指定的队列中。
  3. 接收消息

    • 要接收队列中的消息,可以使用通道对象的basicConsume方法,并指定一个回调函数来处理接收到的消息。
    • 在回调函数中,可以获取消息的内容,并进行相应的处理。

四、示例代码

以下是一个完整的Java示例程序,演示了如何连接到RabbitMQ服务器、创建队列、发送和接收消息:

import com.rabbitmq.client.*;  
import java.io.IOException;  public class RabbitMQExample {  public static void main(String[] args) throws Exception {  // 创建连接工厂并设置连接参数  ConnectionFactory factory = new ConnectionFactory();  factory.setHost("localhost");  factory.setUsername("guest");  factory.setPassword("guest");  // 创建连接和通道  Connection connection = factory.newConnection();  Channel channel = connection.createChannel();  // 创建队列  channel.queueDeclare("myQueue", false, false, false, null);  // 设置消息属性并发送消息  BasicProperties props = new BasicProperties.Builder()  .contentType("text/plain")  .deliveryMode(2) // 持久化消息  .build();  channel.basicPublish("", "myQueue", props, "Hello, RabbitMQ!".getBytes());  // 接收消息  Consumer consumer = new DefaultConsumer(channel) {  @Override  public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body) throws IOException {  String message = new String(body, "UTF-8");  System.out.println("Received message: " + message);  }  };  channel.basicConsume("myQueue", true, consumer);  // 关闭通道和连接  channel.close();  connection.close();  }  
}

五、注意事项

  1. 异常处理:在实际应用中,需要添加适当的异常处理机制,以处理可能出现的连接失败、消息发送失败等异常情况。
  2. 资源管理:在使用完连接和通道后,需要关闭它们以释放资源。可以使用try-with-resources语句或手动关闭它们。
  3. 消息持久化:如果需要确保消息在RabbitMQ服务器重启后不会丢失,可以将消息设置为持久化模式。这需要在发送消息时设置deliveryMode属性为2,并在创建队列时设置队列的持久化属性为true。
  4. 集群部署:为了提高RabbitMQ的可用性和吞吐量,可以将其部署为集群模式。在集群中,消息可以在不同的节点之间进行复制和路由。

通过以上步骤和示例代码,你可以在Java项目中成功使用RabbitMQ进行消息的发送和接收。

相关文章:

  • 酒店智能门锁SDK接口pro[V10] 对接酒店收银-模块封装C#-SAAS本地化-未来之窗行业应用跨平台架构
  • NIO基础
  • Python机器学习:数据预处理与清洗的打开方式
  • 【羊毛资源】华为云开发者云主机免费申请使用指南
  • 线程池:线程池的实现 | 日志
  • 【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
  • uniapp微信小程序,获取上一页面路由
  • YOLO11震撼发布!
  • 服装时尚与动漫游戏的跨界联动:创新运营与策划策略研究
  • erlang学习:Linux命令学习8
  • 完整网络模型训练(一)
  • 思科dhcp的配置
  • Elasticsearch学习笔记(3)
  • C++:一文搞懂友元类(friend class)
  • SpringMVC源码-AbstractHandlerMethodMapping处理器映射器将@Controller修饰类方法存储到处理器映射器
  • fetch 从初识到应用
  • JavaScript的使用你知道几种?(上)
  • JavaScript对象详解
  • python 装饰器(一)
  • Python_OOP
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 初识MongoDB分片
  • 聚类分析——Kmeans
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊聊directory traversal attack
  • 扑朔迷离的属性和特性【彻底弄清】
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 区块链共识机制优缺点对比都是什么
  • 区块链技术特点之去中心化特性
  • 什么是Javascript函数节流?
  • 使用putty远程连接linux
  • 跳前端坑前,先看看这个!!
  • 再谈express与koa的对比
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​香农与信息论三大定律
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #07【面试问题整理】嵌入式软件工程师
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax()方法详解
  • (1)Jupyter Notebook 下载及安装
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (function(){})()的分步解析
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (编译到47%失败)to be deleted
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转) Face-Resources
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法