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进行消息的发送和接收。

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

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

相关文章

从密码学看盲拍合约:智能合约的隐私与安全新革命!

文章目录 前言一、什么是盲拍合约&#xff1f;二、盲拍合约的优势1.时间压力的缓解2.绑定与秘密的挑战 三、盲拍合约的工作原理1.提交盲出价2.披露出价3.结束拍卖4.退款机制 四、代码示例总结 前言 随着区块链技术的发展&#xff0c;智能合约在各种场景中的应用越来越广泛。盲…

芝法酱学习笔记(0.5)——使用jenkins做自动打包

前言 上节讲了SpringBoot上的打包。但这些过程都是手动的&#xff0c;在实际的开发测试时&#xff0c;自动化的打包部署&#xff0c;可以大大提升团队开发的效率 一、去官网下载 1.1 官网安装命令 对于如何安装的问题&#xff0c;我向来推荐官网 wget -O /usr/share/keyri…

针对考研的C语言学习(定制化快速掌握重点2)

1.C语言中字符与字符串的比较方法 在C语言中&#xff0c;单字符可以用进行比较也可以用 > , < ,但是字符串却不能用直接比较&#xff0c;需要用strcmp函数。 strcmp 函数的原型定义在 <string.h> 头文件中&#xff0c;其定义如下&#xff1a; int strcmp(const …

ubuntu server 常用配置

这里写目录标题 0001 虚拟机静态IP0002 vim tab 4个空格0003 设置时区0004 网络端口查看端口开放端口 0005 修噶机主机名 0001 虚拟机静态IP win网络链接&#xff0c;IP地址&#xff1a;192.168.220.1 - NAT网关&#xff1a;192.168.220.2 - ubuntu静态IP设置&#xff1a; ca…

前端——Ajax和jQuery

一、Ajax Ajax即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c; 通过 JS 异步的向服务器发送请 求并接收响应数据。 同步访问&#xff1a;当客户端向服务器发送请求时&#xff0c;服务器在处理的过程中&#xff0c;浏览器…

使用JavaScript实现动态表格

一、引言 JavaScript是一种功能强大的脚本语言&#xff0c;可以用于实现各种交互式网页效果。在本文中&#xff0c;我们将介绍如何使用JavaScript实现动态表格的功能。动态表格是指在网页上显示的数据表格&#xff0c;可以根据用户输入或页面元素的变化动态更新内容。 二、实…

C++第3课——保留小数点、比较运算符、逻辑运算符、布尔类型以及if-else分支语句(含视频讲解)

文章目录 1、课程笔记2、课程视频 1、课程笔记 #include<iostream>//头文件 input output #include<cmath> //sqrt()所需的头文件 #include<iomanip>//setprecision(1)保留小数点位数所需的头文件 using namespace std; int main(){/*复习上节课内容1、…

【韩顺平Java笔记】第5章:程序控制结构

文章目录 102. 回顾上一章节103. 顺序控制103.1 顺序控制 104. 单分支使用104.1 分支控制 if-else 介绍104.2 单分支 105. 单分支流程图106. 双分支使用107. 双分支流程图108. 双分支练习题109. 多分支使用109.1 多分支的流程图 110. 多分支练习1111. 多分支练习2112. 嵌套分支…

最大正方形 Python题解

最大正方形 题目描述 在一个 n m n\times m nm 的只包含 0 0 0 和 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形&#xff0c;输出边长。 输入格式 输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1≤n,m≤100)&#xff0c;接…

ubuntu 开启root

sudo passwd root#输入以下命令来给root账户设置密码 sudo passwd -u root#启用root账户 su - root#要登录root账户 root 开启远程访问&#xff1a; 小心不要改到这里了&#xff1a;sudo nano /etc/ssh/ssh_config 而是&#xff1a;/etc/ssh/sshd_config sudo nano /etc/ssh…

828华为云征文|部署去中心化网络的 AI 照片管理应用 PhotoPrism

828华为云征文&#xff5c;部署去中心化网络的 AI 照片管理应用 PhotoPrism 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 PhotoPrism3.1 PhotoPrism 介绍3.2 PhotoPrism…

【Redis】如何在 Ubuntu 上安装 Redis 5

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍如何在 Ubuntu 上安装 Redis5 一些碎碎念&#xff1a; 本来这期内容介绍如何在 Centos 安装 Redis …

MySQL 8.0 为 Java 开发者提供的强大新特性:深度解析与实战演示

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

基于ScriptableObject设计游戏数据表

前言 本篇文章是针对之前对于ScriptableObject概念讲解的实际应用之一&#xff0c;在游戏开发中&#xff0c;我们可以使用该类来设计编辑器时的可读写数据表或者运行时的只读数据表。本文将针对运行时的只读数据表的应用进行探索&#xff0c;并且结合自定义的本地持久化存储方式…

cheese安卓版纯本地离线文字识别插件

目的 cheese自动化平台是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。可以采用Vscode、IDEA编写&#xff0c;支持Java、Python、nodejs、GO、Rust、Lua。cheese也包含图色功能&#xff0c;识别…

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…

css的盒模型

什么是盒模型&#xff1f; CSS盒模型&#xff08;CSS Box Model&#xff09;是CSS布局的基础&#xff0c;是CSS中用于设计和布局网页的一个核心概念。它定义了HTML元素的表现形式&#xff0c;包括元素的内部空间&#xff08;内容、内边距、边框&#xff09;和外部空间&#xf…

location指令

无前缀,必须以”/“开头 前缀""精准匹配。 前缀”^~“ 普通url匹配。 前缀”~“基于正则表达式的匹配&#xff0c; 区分大小写 前缀”~*“ 匹配优先级 locationlocation^~和无前缀/location ~或~* 1.无任何前缀 不加任何规则&#xff0c;默认大小写敏感&#x…

10.2 Linux_并发_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…

【Linux操作系统】进程的创建与替换

目录 前言&#xff1a;一、进程创建1.fork();1.1 fork基本介绍1.2 fork的原理1.3 写时拷贝1.4 fork的使用场景1.5 fork调用失败的原因 2.clone() 二、进程替换(exec)1.替换原理2.替换函数3.函数解释4.函数理解 前言&#xff1a; 学习了Linux操作系统我们可以知道&#xff0c;进…