使用Java体验RabbitMQ消息的发送与消费过程

RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列 上一篇文章描述了,通过使用广播式的通信方式,让生产者把消息广播给每一个消费者,本节我们介绍另外一个方式,生产者可以指定消费者,把消息发送给它: client.py #!/usr/bin/env python import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters(host='l 阅读详情

        平时工作中,消息中间件运用的场景较多,一般为了解耦,增加处理效率等考虑都会通过消息队列来实现,其中rabbitmq应该是使用得最多了。但是平时都是别人spring整合好了,其中的一些底层连接其实并不清楚。这篇文章通过Java来体验rabbitmq的一个体验过程,可以更好的了解rabbitmq在发送的过程中,需要哪些步骤。

1. 引入rabbitmq的jar包

        因为我们只通过Java来体验rabbitmq的消息发送和消费的过程,所以我们就不引入spring整合rabbitmq的jar包,只引入amqp-client的包。

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

引入了amqp客户端的jar包后就可以体验了。这里有个注意的地方,我这个是在安装好了环境的情况下的操作,如果没有安装过rabbitmq的环境,就需要先去服务器上安装rabbitmq的环境了,我是docker下安装的,直接一条命令就可以了。docker环境安装rabbitmq命令

[root@VM-4-16-centos ~]# docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

2. 消息生产者

        创建一个生产者类SimpleProducer,用来模拟发送消息,类的内容如下

package com.edu.spring.study.rabbitmq;

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

/**
 * @Author alen
 * @DATE 2022/6/5 16:16
 * Java体验rabbitmq之生产者
 */
public class SimpleProducer {

    public static void main(String[] args) {
        //1. 创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //1.1 设置连接IP
        connectionFactory.setHost("127.0.0.1");
        //1.2 设置连接端口
        connectionFactory.setPort(5672);
        //1.3 设置用户名
        connectionFactory.setUsername("admin");
        //1.4 设置密码
        connectionFactory.setPassword("admin123123");
        //1.5 设置虚拟访问节点,就是消息发送的目标路径
        connectionFactory.setVirtualHost("/");

        Connection connection = null;
        Channel channel = null;
        try {
            //2. 创建连接Connection
            connection = connectionFactory.newConnection("生产者");
            //3. 通过连接获取通道Channel
            channel = connection.createChannel();
            //4. 通过通道创建交换机,声明队列,绑定关系,路由key,发送消息,接收消息
            String queueName = "myFirstQueue";
            /**
             * channel.queueDeclare有5个参数
             * params1: 队列的名称
             * params2: 是否要持久化, false:非持久化 true:持久化
             * params3: 排他性,是否独占队列
             * params4: 是否自动删除,如果为true,队列会随着最后一个消费消费完后将队列自动删除,false:消息全部消费完后,队列保留
             * params5: 携带的附加参数
             */
            channel.queueDeclare(queueName, true, false, false, null);
            //5. 消息内容
            String message = "Java体验rabbitmq发送消息";
            //6. 将消息发送到队列
            channel.basicPublish("", queueName, null, message.getBytes());
            System.out.println("消息发送成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //7. 关闭通道
            if (channel != null && channel.isOpen()) {
                try {
                    channel.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            //8. 关闭连接
            if (connection != null && connection.isOpen()) {
                try {
                    connection.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

执行main方法,可以看到rabbitmq的管理端看到有一条未被消费的消息,效果如下

 3. 消息消费者

        消息消费者的内容类似,前面的创建连接等步骤都是需要的,消费者的类详情如下

package com.edu.spring.study.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @Author alent
 * @DATE 2022/6/5 16:18
 * Java体验rabbitmq之消费者
 */
public class SimpleConsumer {

    public static void main(String[] args) {
        //1. 创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //1.1 设置连接IP
        connectionFactory.setHost("127.0.0.1");
        //1.2 设置连接端口
        connectionFactory.setPort(5672);
        //1.3 设置用户名
        connectionFactory.setUsername("admin");
        //1.4 设置密码
        connectionFactory.setPassword("admin123123");
        //1.5 设置虚拟访问节点,就是消息发送的目标路径
        connectionFactory.setVirtualHost("/");

        Connection connection = null;
        Channel channel = null;
        try {
            //2. 创建连接Connection
            connection = connectionFactory.newConnection("生产者");
            //3. 通过连接获取通道Channel
            channel = connection.createChannel();
            //4. 通过通道创建交换机,声明队列,绑定关系,路由key,发送消息,接收消息
            String queueName = "myFirstQueue";
            //5. 接收消息并消费消息
            channel.basicConsume(queueName, true, new DeliverCallback() {
                @Override
                public void handle(String consumerTag, Delivery message) throws IOException {
                    System.out.println("接收到的消息内容是:" + new String(message.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                @Override
                public void handle(String consumerTag) throws IOException {
                    System.out.println("消息接手失败。。。");
                }
            });
            System.out.println("开始接受消息。。。。");
            //阻断程序
            System.in.read();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //7. 关闭通道
            if (channel != null && channel.isOpen()) {
                try {
                    channel.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            //8. 关闭连接
            if (connection != null && connection.isOpen()) {
                try {
                    connection.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

执行消费者的main方法,就会进行消息的消费了,效果如下:

消息消费成功,当然这个是一个最简单的流程,主要是用来了解rabbitmq消息的原生代码怎么写

后续在把spring的整合学习总结后再分享。

【ABAP】SAP发送消息至RabbitMQ 消息队列中间件(Message Queue Middleware,即MQ)也可以称之为消息队列或者消息中间件,是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 阅读详情

相关推荐

RabbitMQ系列教程三:RabbitMQ最全特性一览及Java Api的使用

RabbitMQ入门教程 当初我学RabbitMQ的时候,第一时间就上GitHub找相应的教程,但是令我很失望的是没有找到,Spring,Mybatis之类的教程很多,而RabbitMQ的教程几乎找不到,看的最多的就是朱小厮大佬的博客。后来想着索性自己总结一下吧,有不恰当的地方欢迎小伙伴指出。 这篇文章主要是对着我在GitHub上的源码解释的,因此本文并没有太多的源码。写了挺长时间的,为了防止迷...

小识的博客 1370

RabbitMQ入门(二)

消息从生产者发送到exchange,再到queue,再到消费者,可能导致消息丢失的情况:1.发送时丢失:2.MQ宕机,queue将消息丢失3.消费者接收到消息后未消费就宕机RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。结果有两种请求:1.publisher-confirm,发送者确认2.publisher-return,发送者回执实现生产者确认步骤:1.导依赖,写配置 配置说明:publish

qq_65567681的博客 7629

RabbitMQ查询队列使用情况和消费者详情实现

RabbitMQ Management插件还提供了基于RESTful风格的HTTP API接口来方便调用。一共涉及4种HTTP方法:GET、PUT、DELETE和POST。GET方法一般用来获取如集群、节点、队列、交换器等信息。PUT方法用来创建资源,如交换器、队列之类的。DELETE方法用来删除资源。POST方法也是用来创建资源的,与PUT不同的是,POST创建的是无法用具体名称的资源。比如绑定关系(bindings)和发布消息(publish)无法指定一个具体的名称。

洛阳泰山的博客 4363

Rabbitmq怎么看消费过了的消息呢?

mq小知识,如何查看消费过的消息

人在江湖 1万+

rabbitmq 所需jar包

rabbitmq,amqp-client,spring-amqp,spring-rabbit,spring-retry JAR包合集

一代测序、二代测序以及三代测序的优缺点及应用对比?

一、初现庐山真面目 一代测序:又称Sanger测序(多分子,单克隆) 历史:第一代DNA测序技术(又称Sanger测序)在1975年,由Sanger等人开创,并在1977年完成第一个基因组序列(噬菌体X174),全长5375个碱基。研究人员经过30年的实践并对技术及测序策略的不断改进(如使用了不同策略的作图法、鸟枪法),2001年完成的首个人类基因组图谱就是以改进了的Sanger法为其测序基础。 原理:在4个DNA合成反应体系(含dNTP)中分别加入一定比例带有标记的ddNTP(分为:ddATP...

wangprince2017 3万+

Java使用RabbitMQ发送和接收消息

RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性收到越来越多企业的青睐。下面介绍Java中如何使用RabbitMQ生产和消费消息。 使用Maven添加依赖文件 在pom.xml配置信息文件中,添加 RabbitMQ 客户端依赖: <!-- RabbitMQ客户端 --&

pan_junbiao的博客 6661

WPF插件架构-如何动态加载封装好的第三方DLL的界面

插件架构中如何自动加载第三方DLL中的UI界面

lg24k的博客 1882

rabbitmq开启手动确认消息消费

背景 由于rabbitmq发送端和消费端不在同一个系统中。参考了网上的一些配置,只在发送端配置了消息消费确认,而每次消费端消费时,并没有确认消费,也是消费完直接删除消息了。 原因 发送端与消费端需要分开配置。如果消费端不配置消息确认的话,则默认无需确认,直接消费完后即删除。 消费端需配置 spring: rabbitmq: listener: #加了2下面2个属性,消费消息的时候,就必须发送ack确认,不然消息永远还在队列中 direct: acknowledge-

梦游小草的博客 4421

从SFF-8087到SFF-8643:详解服务器硬盘背板连接线缆的演变与实战接线

本文深度解析了服务器硬盘背板连接技术从SFF-8087到SFF-8643的演进历程,重点介绍了SAS、SATA和U.2接口的技术特点与实战接线方案。通过对比不同连接器标准的物理特性和电气规范,提供了混合环境下的线缆选择策略和常见故障排查指南,帮助IT专业人员优化存储系统性能与稳定性。

weixin_30603633的博客 275

双系统下 ubuntu 20.04 突然 开机黑屏报错 hdaudioC0D2: unable to configure disabling

今天在开实验室开双系统台式机时,ubuntu 20.04 系统下,突然在某次关机后再开机时,本来启动好好的,但是在进行图形化启动时,本来应该是显示输入账号和密码时,直接黑屏报错了,内容为 hdaudioC0D2: unable to configure disabling ,这里是记录了报错的解决全过程

qq_48717745的博客 990

SpringBoot+RabbitMQ发送确认和消费手动确认机制

配置RabbitMQ # 发送确认 spring.rabbitmq.publisher-confirms=true # 发送回调 spring.rabbitmq.publisher-returns=true # 消费手动确认 spring.rabbitmq.listener.simple.acknowledge-mode=manual 1. 生产发送消息确认机制 其实这个也不能叫确认...

yuyeqianhen的博客 1万+

使用vite+react+ts+Ant Design开发后台管理项目(四)

本文将引导开发者从零基础开始,运用、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术工具,从项目构思到最终实现的全过程,提供清晰的开发思路和实用的技术应用技巧。使用vite+react+ts+Ant Design开发后台管理项目(一)使用vite+react+ts+Ant Design开发后台管理项目(二)

lbking666666的专栏 2006

RabbitMQ——消息发送和消息接收机制

RabbitMQ——消息发送和消息接收机制

贝尔摩德苦艾酒 1万+

DaVinciCFG实战:从ARXML配置到ADC代码生成全解析

本文详细解析了使用DaVinciCFG工具进行ADC模块配置的全过程,从ARXML文件处理到代码生成与集成。重点介绍了关键参数配置、ARXML语法规则、常见错误排查及代码优化技巧,帮助开发者掌握AUTOSAR架构下ADC驱动开发,提升汽车电子系统的可靠性。

f9g0h的博客 378

12、探索新型高能量密度材料:FOX-7的化学进展

本文全面探讨了新型高能量密度材料FOX-7的化学进展,包括其独特的分子结构、优异的热稳定性、光谱性质以及爆炸性能。对比传统高爆炸药RDX,FOX-7展现出更低的敏感性和更高的安全性。文章还介绍了FOX-7的合成方法、异构体研究、与其结构相关的化合物以及富氮高能材料的最新发展。通过实验和计算方法,研究人员不断优化这类材料的性能,以满足军事和工业领域的高要求。

sea99的博客 350

SpringBoot整合RabbitMQ并实现消息发送与接收

消息队列(Message Queue)是一种高效的异步通信机制,它在分布式应用系统中扮演着重要的角色。简单来说,消息队列将消息发送者和消息接收者解耦,消息发送者只需要将消息发送给队列,而不需要知道消息是如何被消费者处理的,同时,消息接收者也只需要从队列中订阅自己需要的消息,而不需要知道这些消息是由哪个发送者发送的。消息队列能够提高应用程序的可扩展性、可靠性以及灵活性,并且能够缓解高并发情况下的压力。 RabbitMQ 是一个开源的 AMQP 消息代理软件,它基于 Erlang/OTP 平台

心态的博客 3798

Openclaw 错误分析 与 解决方案 之:Selected model is at capacity. Try a different model, or wait and retry.

Openclaw 错误分析 与 解决方案 :Selected model is at capacity. Try a different model, or wait and retry.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 6415

使用Java模拟消费者是如何消费rabbitMQ消息队列中的消息的

文章目录使用Java模拟消费者是如何消费rabbitMQ消息队列中的消息的介绍引入rabbitmq依赖生产者把消息发送到rabbitmq的消息队列消费者从消息队列中取消息启动顺序代码中的Connection,channel,Queue的意思生产者把消息发到哪里去了? 使用Java模拟消费者是如何消费rabbitMQ消息队列中的消息的 介绍 大致概括:生产者生产一个消息存放到rabbitmq中的消息队列中,然后消费者再从这个消息队列中取出这个消息。 在本教程的这一部分中,我们将用Java编写两个程序。发送单个

xzy的博客 2066

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java接收rabbitmQ消息_RabbitMQ消息发送与接收

1.简介所有MQ产品从模型抽象上来说都是一样的过程。消费者订阅某个队列。生产者创建消息,然后发布到队列,最后将消息发送到监听的消费者。AMQP(Advanced message queuing protocol)是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端、中间件等不同产品,不同开发语言等条件的限制。ActiveMQ是基于JMS(Java Mess...

weixin_29035405的博客 2492

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RabbitMQ实现消息发送和消费以及多个消费者的情况

SPRINGBOOT整合RABBITMQ,实现消息发送和消费以及多个消费者的情况 下载安装Erlang和RabbitMQ AMQP协议详解与RABBITMQ,MQ消息队列的应用场景,如何避免消息丢失 项目创建和依赖 代码 topic exchange 通配路由中多个消费者的情况 下载安装Erlang和RabbitMQ AMQP协议详解与RABBITMQ,MQ消息队列的应用场景,如何避免消息丢失 项目创建和依赖 代码 topic exchange 通配路由中多个消费者的情况 下载安装Erlang和Rabbit

weixin_42118323的博客 1303

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

RabbitMQ消息发送和接收

1.RabbitMQ的消息发送和接受机制 所有 MQ 产品从模型抽象上来说都是一样的过程: 消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。 上面是MQ的基本抽象模型,但是不同的MQ产品有有者不同的机制,RabbitMQ实际基于AMQP协议的一个开源实现,因此RabbitMQ内部也是AMQP的基本概念。 RabbitMQ的内部接收如下: 1、Message 消息,消息是不具体的,它由消息头和消息体组成。消息体是

weixin_45856470的博客 5280

java调用rabbitmq消息队列发送和接收消息实例

消费者Consumer.java代码 package com.rabbitMQ.pro; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Queue

爱代码也爱生活 2万+

rabbitmq生成消费+获取某一队列中消息数量

rabbitmq生成消费+获取某一队列中消息数量 package com.zkjz.eyes.rabbitmq; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.c...

qq_43062134的博客 5180

rabbitmq怎样确认是否已经消费了消息_RabbitMQ最佳实践

点击上方“Java知音”,选择“置顶公众号”技术文章第一时间送达!作者:无知者云https://www.cnblogs.com/davenkin推荐阅读(点击即可跳转阅读)1.SpringBoot内容聚合2.面试题内容聚合3.设计模式内容聚合4.排序算法内容聚合5.多线程内容聚合在使用消息机制时,我们通常需要考虑以下几个问题:消息不能丢失保证消息一定能投递到目的地保证业务处理和...

weixin_39631649的博客 1万+

rabbitmq怎样确认是否已经消费了消息_【RabbitMq 篇六】消息确认(发送确认与接收确认)...

前言消息确认是保证消息传递可靠性的重要步骤,上一节我们说到持久化,持久化只能保证消息不丢失,但是如果消息如果投递失败我们怎么进行补偿操作呢?解决办法就是实现回调函数进行操作,在消息的发送和消息的消费都可以进行补偿操作,下面我们就要讲解消息确认。正文目录前言正文消息确认种类消息发送确认ConfirmCallbackReturnCallback消息消费确认消息确认种类消息的确认做有很多法,其...

weixin_39641236的博客 2815
上一篇: Docker镜像的理解
下一篇: Spring Boot整合RabbitMQ之发布与订阅模式(fanout)
~小爷.
博客等级 码龄9年 26粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值