用RabbitMQ发送消息

RabbitMQ 如何保证消息的可靠传输 针对上述问题,如果还要确保 RabbitMQ 生产者的消息正确投递,可以开启 confirm 模式,在生产者端设置开启 confirm 模式之后,你每次写的消息都会分配一个唯一的 id,然后如果写入了 RabbitMQ 中,RabbitMQ 会给你回传一个 ACK 消息,告诉你说这个消息 ok 了。注意,哪怕是你给 RabbitMQ 开启了持久化机制,也有一种可能,就是这个消息写到了 RabbitMQ 中,但是还没来得及持久化到磁盘上,结果不巧,此时 RabbitMQ 挂了,就会导致内存中的数据丢失。 阅读详情

你需要什么

  • 大约 15 + 15 分钟
  • IntelliJ IDEA或其他编辑器
  • JDK 1.8或更高版本
  • Maven 3.2+
  • RabbitMQ服务器

你会建立什么

您将构建一个使用Spring AMQP的RabbitTemplate发布消息并使用MessageListenerAdapter在POJO上订阅消息的应用程序。

构建步骤

1、安装 RabbitMQ。

2、添加 Maven依赖。

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

同时配置一把application.properties:

spring.application.name=spirng-boot-rabbitmq

spring.rabbitmq.host=192.168.56.101
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456

3、创建一个RabbitMQ消息接收器。

import java.util.concurrent.CountDownLatch;
import org.springframework.stereotype.Component;

@Component
public class Receiver {

    private CountDownLatch latch = new CountDownLatch(1);

    public void receiveMessage(String message) {
        System.out.println("Received <" + message + ">");
        latch.countDown();
    }

    public CountDownLatch getLatch() {
        return latch;
    }

}

Receiver是一个简单的POJO,它定义了一种接收消息的方法。当你注册它接收消息时,你可以任意命名它。

4、注册侦听器
Spring AMQP的RabbitTemplate提供了用RabbitMQ发送和接收消息所需的一切。具体来说,你需要配置:

  • 消息侦听器容器(message listener container)
  • 声明队列,交换机和它们之间的绑定(Declare the queue, the exchange, and the binding between them)
import com.sqlb.guiderabbitmq.bean.Receiver;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfig {
    public static final String topicExchangeName = "spring-boot-exchange";

    public static final String queueName = "spring-boot";

    /** 队列*/
    @Bean
    Queue queue() {
        return new Queue(queueName, false);
    }

    /**交换机*/
    @Bean
    TopicExchange exchange() {
        return new TopicExchange(topicExchangeName);
    }

    /**绑定队列和交换机*/
    @Bean
    Binding binding(Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("foo.bar.#");
    }

    /**消息监听器*/
    @Bean
    SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
                                             MessageListenerAdapter listenerAdapter) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames(queueName);
        container.setMessageListener(listenerAdapter);
        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(Receiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

}

在listenerAdapter()方法中定义的bean在container()中定义的容器中注册为消息侦听器。它将侦听“spring-boot”队列中的消息。由于Receiver类是POJO,因此需要将其包装在MessageListenerAdapter中,在其中指定它以调用receiveMessage方法。

在这种情况下,我们使用TopicExchange,队列绑定到路由键 foo.bar.#。 这意味着任何使用以 foo.bar. 开头的路由键发送的消息,将被路由到队列中。

发送测试消息


import java.util.concurrent.TimeUnit;

import com.sqlb.guiderabbitmq.bean.Receiver;
import com.sqlb.guiderabbitmq.config.RabbitMqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class Runner implements CommandLineRunner {

    private final RabbitTemplate rabbitTemplate;
    private final Receiver receiver;

    public Runner(Receiver receiver, RabbitTemplate rabbitTemplate) {
        this.receiver = receiver;
        this.rabbitTemplate = rabbitTemplate;
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Sending message...");
        rabbitTemplate.convertAndSend(RabbitMqConfig.topicExchangeName, "foo.bar.baz", "Hello from RabbitMQ!");
        receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);
    }

}

测试结果

原文地址 https://spring.io/guides/gs/messaging-rabbitmq/

RabbitMQ 客户端 连接、发送、接收处理消息 (3) 如果 RabbitMQ 服务收到消息,就转发给 注册接收消息接口的 连接,如果接收的连接标记了 AutoDelete,那么发送给客户端后,RabbitMQ 就会将消息从消息队列中删除。而 RabbitMQ 的消费消息(接收消息) 也仅仅是接收消息,它不管是谁发的消息,只要是发送的 RabbitMQ 服务的消息,它都能接收,注册接收消息,我的客户端就会收到 RabbitMQ 发送过来的消息,消息中包含发送上来的消息内容,还有发送消息的 queue 名字。 阅读详情

相关推荐

一文详解RabbitMQ的发送与接收。

消息队列呢,其实用法都是一样的,只是各个开源消息队列的侧重点稍有不同,我们应该根据我们自己的项目需求来决定我们应该选取什么样的消息队列来为我们的项目服务,这个项目选型的工作一般都是开发组长帮你们做了,一般是轮不到我们来做的,但是面试的时候可能会考察相关知识,所以这几种消息队列我们都应该有所涉猎。上面说了消息队列带来的好处以及问题,而这些不在我们今天这篇的讨论范围之内,我打算之后再写这些,我们今天要做的是搭建出一个消息队列环境,让大家感受一下基础的发消息与消费消息,更高级的问题会放在以后讨论。

2301_76607156的博客 2501

消息队列——RabbitMq

一、消息队列的使用场景 一、消息队列的使用场景) 一、消息队列的使用场景 异步处理 应用解耦 流量削锋 消息通讯 【1】异步处理:场景说明:用户注册后,需要发注册邮件和注册短信。 引入消息队列后架构如下:用户的响应时间=注册信息写入数据库的时间,例如50毫秒。发注册邮箱、发注册短信写入消息队列后,直接返回客户端,因写入消息队列的速度很快,基本可以忽略,因此用户的响应时间可能是50毫秒。 按照传统的做法: ①、串行方式,将注册信息写入数据库成功后,发注册邮件,再发送注册短信,以上三个成功后,返回客户端。可

weixin_45080272的博客 6564

Python之Rabbitmq发送消息

欢迎关注【无量测试之道】公众号,回复【领取资源】, Python编程学习资源干货、 Python+Appium框架APP的UI自动化、 Python+Selenium框架Web的UI自动化、 Python+Unittest框架API自动化、 资源和代码 免费送啦~ 文章下方有公众号二维码,可直接微信扫一扫关注即可。 1、什么是Rabbitmq? Rabbitmq是一个在AMQP基础上完整的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。 MQ全称为Messag.

Python+大数据+数据分析+自动化+Vue组件开发 3915

RabbitMQ 的七种消息传递形式

RabbitMQ 的七种消息传递形式

weixin_64811434的博客 4016

RabbitMQ 事务-同步发送消息事务

RabbitMQ 事务-同步发送消息事务 消息确认机制 RabbitMQ提供了transaction、confirm两种消息确认机制。transaction即事务机制,手动提交和回滚;confirm机制提供了Confirmlistener和waitForConfirms两种方式。confirm机制效率明显会高于transaction机制,但后者的优势在于强一致性。如果没有特别的要求,建议...

shenzhen_zsw的专栏 1819

rabbitmq管理页面发送消息

Delivery mode: 是否持久化,1 - Non-persistent,2 - Persistent Headers:Headers can have any name. Only long string headers can be set here. __TypeId__: 消息体实体类类型 当需要在消费端对应实体类接受时 需要设置该属性 值为对应实体类在项目下的全路径 ${包名....

tank_panda的博客 6027

Springboot+RabbitMQ简单的发送消息

1、实体类: package com.example.entity; import lombok.Data; import java.io.Serializable; @Data public class Order implements Serializable { private static final long serialVersionUID = -184478674...

i168wintop的博客 1813

SpringBoot整合RabbitMQ之发送接收消息实战

实战前言 前几篇文章中,我们介绍了SpringBoot整合RabbitMQ的配置以及实战了Spring的事件驱动模型,这两篇文章对于我们后续实战RabbitMQ其他知识要点将起到奠基的作用的。特别是Spring的事件驱动模型,当我们全篇实战完毕RabbitMQ并大概了解一下RabbitMQ相关组件的源码时,会发现其中的ApplicationEvent、ApplicationListener、ApplicationEventPublisher跟RabbitMQ的Message、Listener、RabbitT

weixin_45863786的博客 1230

RabbitMQ消息发送和接收

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

weixin_45856470的博客 5280

模拟滤波器的基础知识和设计

使用Python实现多种模拟滤波器

faltas的博客 3530

​​EMC设计实战:BCI(大电流注入)硬件设计规范

LIN接口:集成TVS管(如PESD5V0S1BL)与共模电感,耐压等级≥20V(8kV HBM)。输入滤波:10μF电解电容(100kHz截止)+ 0.1μF陶瓷电容(10MHz截止)。​:全频段(1MHz-400MHz)注入200mA电流,LIN通信误码率<0.01%。对敏感电路(如传感器)采用隔离电源(如ADuM5000),隔离电压≥3kVrms。​:连续波(CW)与调幅波(AM,调制深度80%)组合,覆盖全频段干扰场景。​:选择低频段(1-100MHz)感量≥100μH的绕线电感,抑制共模电流。

m0_50833886的博客 1933

简单Rabbitmq 发送消息和接收消息

简单Rabbitmq 发送消息和接收消息 1 先在Rabbitmq配置文件中预先创建好交换器,队列,路由等信息。 2 创建生产者发送消息 @Autowired private RabbitTemplate rabbitTemplate; private void mqSendMessage(UserOperLog userOperLog) throws Exception{ rabbitTemplate.setExchange("test.file.ex.

DK微风的博客 7562

YOLOv8中间特征层可视化

在通过观察这些特征,可以清楚地看到模型如何逐步将输入图像转化为有意义的表示。

weixin_45314480的博客 6890

JMeter 发送 rabbitmq 消息

一、编写MQ.java package com.example.demo.test; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException; import java.util.concurr...

chengloveye的博客 1589

手把手教你用STM32CubeMX配置Bootloader:从分区设置到跳转逻辑详解(含完整代码示例)

本文详细介绍了如何使用STM32CubeMX配置STM32 Bootloader,从基础概念到完整实现。涵盖Flash分区设置、跳转逻辑、固件升级协议设计等关键步骤,并提供完整代码示例。适合嵌入式开发者快速掌握Bootloader开发技巧,提升STM32固件升级能力。

weixin_29169505的博客 283

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 741

Java使用RabbitMQ发送和接收消息

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

pan_junbiao的博客 6661

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

孤寒者的博客 1万+

rabbitmq消息ACK确认机制及发送失败处理

rabbitmq为确保消息发送和接收成功,采用ack机制。 (1)生产者producter发送消息到mq时,mq会发送ack给producter告知消息是否投递成功; (2)消费者consumer接收处理消息后,consumer会发送ack给mq告知消息是否处理成功; 通过ack机制,确保消息能够被producter成功发送和consumer成功接收处理,保证消息不丢失。

古甲哈醒的专栏 5339

大语言模型原理与工程实践:行业大语言模型的评测:以金融行业大语言模型为例

大语言模型、金融行业、模型评测、自然语言处理、深度学习、Transformer、BERT、GPT 1. 背景介绍 近年来,大语言模型(Large Language Model,LLM)在自然语言处理(Natural Language Processing,NLP)领域取得了突破性的进

AI大模型应用之禅 136

【62】OpenCV C++实战篇——【项目实战】OpenCV C++ 精准定位“十字刻度尺”中心坐标,过滤图片中的干扰,精准获取十字交点坐标

本文针对工业相机拍摄的2000万像素图像中十字刻度尺的精确定位问题进行了研究。面对图像较暗、存在红黄干扰、记号笔涂抹及细节模糊等难点,提出了一种基于霍夫变换的解决方案。通过灰度化、反色、二值化预处理后,对比分析了多尺度霍夫直线(HoughLines)和渐进概率霍夫线段(HoughLinesP)两种方法的定位效果。实验结果表明,HoughLinesP由于具有最小线段长度和间隙约束,在直线贴合度和交点定位精度上表现更优,其返回的线段端点坐标也更便于后续处理。该研究为工业视觉中微小目标的精确定位提供了实用参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 975

RabbitMq消息发送

如果要发送一个消息,可以使用channel类的basicPublish方法参考如下,其中在rabbitmqTemplate中封装的方式是:rabbitMqTemplate.send(Rab...

tianjingle 882

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

weixin_29035405的博客 2492

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql监听rabbitmq消息_RabbitMQ 消息发送、消息监听

文章转载自:https://www.cnblogs.com/wangyaobk/articles/7885052.html本文是基于spring-rabbit中间件来实现消息的发送接受功能项目搭建采用spring-boot:pom.xml如下:1 2 3 org.springframework.boot4 spring-boot-s...

weixin_36429576的博客 290

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

四种策略确保 RabbitMQ 消息发送可靠性!你用哪种?

四种策略确保 RabbitMQ 消息发送可靠性!你用哪种?

2302_76672693的博客 1426

RabbitMQ 如何保证消息一定会发送成功?【RabbitMQ Publisher Confirm 机制】

我们知道 RabbitMQ 保证消息一定会发送成功,一般有两种方式,分别是 Publisher Confirm 机制和事务消息,本篇分享如何使用 Publisher Confirm 来保证消息一定发送成功。

weixin_42118323的博客 1405
上一篇: redis 常用命令行指令汇总
下一篇: 验证表单输入
She_lock
博客等级 码龄12年 157粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值