RocketMQ笔记(三)SpringBoot整合RocketMQ发送单向消息

目录

    • 一、简介
      • 1.1、特点
      • 1.2、场景
    • 二、Maven依赖
    • 三、application配置
    • 四、生产者
      • 4.1、测试类
      • 4.2、运行结果

一、简介

  RocketMQ 提供了一种单向发送消息的方法,在这种模式下,生产者只负责尽快地发送消息,而不需要关心消息是否被Broker接收,也不会收到任何消息发送结果的响应。这个方法就是RocketMQTemplatesendOneWay

1.1、特点

  使用sendOneWay方法的特点如下:

  • 发送速度极快 由于无需等待Broker的响应确认,生产者可以连续不断地发送消息,发送效率极高。
  • 无法保证可靠性 生产者无法知道消息是否已成功发送到Broker,也无法重试发送失败的消息,可能会导致消息丢失。
  • 返回值为void 该方法直接返回void,不会像同步或异步发送那样返回SendResult。
  • 调用方式简单 调用方式非常简单,只需指定消息和Topic即可,无需额外参数。
  • 吞吐量极高 生产者无需等待Broker响应,可以在极短时间内发送大量消息,适用于对吞吐量有极高要求的场景。

1.2、场景

  一般来说,sendOneWay模式适用于以下场景:

  • 允许出现少量消息丢失的场景,例如日志收集等。
  • 对发送吞吐量和延迟要求极高的场景,例如需要在毫秒级别完成消息发送。

  但在绝大多数正式场景中,由于无法保证消息可靠传输,通常不推荐使用这种发送模式。如果对消息可靠性有一定要求,建议使用同步或异步可靠发送模式。不管怎么样,我们还是看看怎么使用的吧。

二、Maven依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>rocketmq</artifactId><groupId>com.alian</groupId><version>1.0.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>03-send-one-way-message</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>com.alian</groupId><artifactId>common-rocketmq-dto</artifactId><version>1.0.0-SNAPSHOT</version></dependency></dependencies></project>

  父工程已经在我上一篇文章里,通用公共包也在我上一篇文章里有说明,包括消费者。具体参考:RocketMQ笔记(一)SpringBoot整合RocketMQ发送同步消息

三、application配置

application.properties

server.port=8003# rocketmq地址
rocketmq.name-server=192.168.0.234:9876
# 默认的生产者组
rocketmq.producer.group=oneway_group
# 发送同步消息超时时间
rocketmq.producer.send-message-timeout=3000
# 用于设置在消息发送失败后,生产者是否尝试切换到下一个服务器。设置为 true 表示启用,在发送失败时尝试切换到下一个服务器
rocketmq.producer.retry-next-server=true
# 用于指定消息发送失败时的重试次数
rocketmq.producer.retry-times-when-send-failed=3
# 设置消息压缩的阈值,为0表示禁用消息体的压缩
rocketmq.producer.compress-message-body-threshold=0

四、生产者

  由于这种单向消息不是很推荐,所有测试我们也简单测试吧。

4.1、测试类

SendOnewayMessageTest.java

@Slf4j
@SpringBootTest
public class SendOnewayMessageTest {@Autowiredprivate RocketMQTemplate rocketMQTemplate;@Testpublic void onewaySendStringMessage() {String topic = "string_message_topic";String message = "我是一条单向消息:onewaySendStringMessage";rocketMQTemplate.sendOneWay(topic, message);}@Testpublic void onewaySendStringMessageWithBuilder() {String topic = "string_message_topic";String message = "我是一条单向消息:onewaySendStringMessageWithBuilder";Message<String> msg = MessageBuilder.withPayload(message).build();rocketMQTemplate.sendOneWay(topic, msg);}@Testpublic void onewaySendJsonMessage() {String topic = "json_message_topic";JSONObject json = new JSONObject();json.put("nick", "单向消息");json.put("name", "Alian");json.put("age", "28");json.put("hobby", "java");rocketMQTemplate.sendOneWay(topic, json);}@Testpublic void onewaySendJsonMessageWithBuilder() {String topic = "json_message_topic";JSONObject json = new JSONObject();json.put("nick", "单向消息");json.put("name", "Alian");json.put("age", "28");json.put("hobby", "java");Message<JSONObject> msg = MessageBuilder.withPayload(json).build();rocketMQTemplate.sendOneWay(topic, msg);}@Testpublic void onewaySendJavaObjectMessage() {String topic = "java_object_message_topic";Member member = new Member();member.setId(10086L);member.setMemberName("Alian");member.setAge(28);member.setBirthday(new Date());rocketMQTemplate.sendOneWay(topic, member);}@Testpublic void onewaySendJavaObjectMessageWithBuilder() {String topic = "java_object_message_topic";Member member = new Member();member.setId(10086L);member.setMemberName("Alian");member.setAge(28);member.setBirthday(new Date());Message<Member> msg = MessageBuilder.withPayload(member).build();rocketMQTemplate.sendOneWay(topic, msg);}@AfterEachpublic void waiting() {try {Thread.sleep(3000L);} catch (InterruptedException e) {e.printStackTrace();}}
}

4.2、运行结果

2024-03-11 14:45:28.599  INFO 9232 --- [P_JAVA_OBJECT_1] c.a.c.JavaObjectMessageConsumer          : java对象消费者接收到的消息: Member(id=10086, memberName=Alian, age=28, birthday=Mon Mar 11 14:45:28 CST 2024)
2024-03-11 14:45:31.596  INFO 9232 --- [P_JAVA_OBJECT_2] c.a.c.JavaObjectMessageConsumer          : java对象消费者接收到的消息: Member(id=10086, memberName=Alian, age=28, birthday=Mon Mar 11 14:45:31 CST 2024)
2024-03-11 14:45:34.626  INFO 9232 --- [NT_GROUP_JSON_5] c.alian.concurrent.JsonMessageConsumer   : json消费者接收到的消息: {"nick":"单向消息","name":"Alian","age":"28","hobby":"java"}
2024-03-11 14:45:37.636  INFO 9232 --- [_GROUP_STRING_1] c.a.concurrent.StringMessageConsumer     : 字符串消费者接收到的消息: 我是一条单向消息:onewaySendStringMessage
2024-03-11 14:45:40.656  INFO 9232 --- [NT_GROUP_JSON_6] c.alian.concurrent.JsonMessageConsumer   : json消费者接收到的消息: {"nick":"单向消息","name":"Alian","age":"28","hobby":"java"}
2024-03-11 14:45:43.666  INFO 9232 --- [_GROUP_STRING_2] c.a.concurrent.StringMessageConsumer     : 字符串消费者接收到的消息: 我是一条单向消息:onewaySendStringMessageWithBuilder

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

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

相关文章

Opencv相机的读取、拍摄、保存

Opencv相机的读取、拍摄、保存 以下是OpenCV相机的读取、拍摄和保存的基本步骤&#xff1a; 1、读取相机数据 要从相机中读取数据&#xff0c;可以使用cv2.VideoCapture()函数。该函数接受两个参数&#xff0c;即相机的索引和视频捕获模式。例如&#xff0c;要从名为“camera…

Qt 富文本处理 (字体颜色大小加粗等)

Qt中支持HTML的控件有textEdit 、label 、textBrowser 。 接口&#xff1a;setHtml("Qt"); toHtml(). 文本样式设置 : 可分字设置 &#xff0c;主要使用QTextCharFormat类进行文本样式设置。 示例&#xff1a; QTextCharFormat fmt; //粗体 fmt.setFontWeight…

在 IntelliJ IDEA 中部署 Java 项目的详细步骤

在进行 Java 项目的部署前&#xff0c;确保你已经完成了以下准备工作&#xff1a; 项目开发完成&#xff1a;确保 Java 项目已经经过完整的开发&#xff0c;并且通过了相关的测试。依赖管理&#xff1a;确认项目中所有的依赖项都已经正确配置&#xff0c;并且可以被正常引入。…

蓝桥杯备考随手记: 求最大公约数

1. 最大公约数的定义 最大公约数指的是两个或多个整数中能同时整除它们的最大正整数。最大公约数也可以被称为最大公因数、最大公因子或者简称为GCD&#xff08;Greatest Common Divisor&#xff09;。例如&#xff0c;对于整数12和18来说&#xff0c;它们的最大公约数是6。 …

查找算法及查找常用数据结构总结

1.顺序表查找 基本方法&#xff1a; 设查找表以一维数组来存储&#xff0c;要求在此表中查找出关键字的值为x的元素的位置&#xff0c;若查找成功&#xff0c;则返回其位置&#xff08;即下标&#xff09;&#xff0c;否则&#xff0c;返回一个表示元素不存在的下标&#xff0…

VMware虚拟机共享主机v2rayN

目录 &#x1f33c;前言 &#x1f33c;解释 &#x1f6a9;操作 1&#xff09;VMware -- 虚拟网络编辑器 2&#xff09;VMware -- 网络适配器 3&#xff09;主机 IP 地址 4&#xff09;v2rayN 代理端口 5&#xff09;VMware -- 网络代理(Network proxy) &#x1f382;结…

红黑树介绍及插入操作的实现

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

轻松集成所有大模型——一站式大模型应用开发框架Promptulate

&#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;大模型创业、LangChain Top Contributor、算法工程师、Promptulate founder、Python开发者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#xff1a;Zeeland…

windows平台虚拟机安装

windows平台虚拟机安装 1. 安装VMwareWorkstationPro 1.1 软件下载 官网下载 官网 百度网盘下载 版本 VMwareWorkstationPro16 链接&#xff1a;https://pan.baidu.com/s/1LidMxoM9e4a4CANixyRoyg?pwd1157 提取码&#xff1a;1157 1.2 软件安装 软件安装注意事项 软件…

代码学习第32天---动态规划

随想录日记part32 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.30 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及两个方面&#xff1a; 不同路径 &#xff1b; 不同路径 II。 62.不同路径 63. 不同路径 II 动态…

接口和抽象类的区别【大白话Java面试题】

接口和抽象类的区别 大白话回答 1、接口是行为的抽象&#xff0c;是一种行为的规范&#xff0c;接口是like a 的关系&#xff1b;抽象是对类的抽象&#xff0c;是一种模板设计&#xff0c;抽象类是is a 的关系。 2、接口没有构造方法&#xff0c;而抽象类有构造方法&#xff0…

爬虫框架Scrapy从创建到使用

scrapy框架安装命令 1.需要安装python 链接: link 2.scrapy安装命令 python -m pip install Scrapy3. 创建爬虫项目 scrapy startproject 项目名称4.创建爬虫文件 scrapy genspider 爬虫名 域名5.爬虫运行 scrapy crawl 爬虫名scrapy 项目目录介绍 PaC #项目文件名称P…

Canvas实现圆点动画

示例效果图&#xff1a; 话不多说直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…

Unity类银河恶魔城学习记录11-10 p112 Items drop源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemObject_Trigger.cs using System.Collections; using System.Collecti…

P28—P31:变量

P28-变量的定义 什么是变量&#xff1f; 从本质上来说&#xff0c;变量就是一块内存空间&#xff0c;而这块内存空间有数据类型、名字、字面值。变量包含三部分&#xff1a;数据类型、名字、字面值&#xff08;数据&#xff09;变量是内存中存储的基本单元。 数据类型的作用&a…

Linux 查看磁盘信息:df与du命令详解

一、df 1.简介 df 是 disk free的缩写&#xff0c;从UNIX和类UNIX操作系统的早期开始&#xff0c;它就是UNIX和类UNIX操作系统的一部分。它被设计为一种工具&#xff0c;用于监视系统上已使用和可用的磁盘空间数量。 df 命令主要用于需要检查文件系统上已使用和可用的磁盘空…

第十三届蓝桥杯JavaA组省赛真题 - GCD

解题思路&#xff1a; 找规律 最大的最小公因数就是两数的差值 5 7 gcd2 1 3 gcd2 1 4 gcd3 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);long a scan.nextLong();long b scan.ne…

查找--二分查找(Binary Search)

二分查找属于静态查找表&#xff0c;当以有序表表示静态查找表时&#xff0c;查找函数可用折半查找来实现。 查找过程&#xff1a;先确定待查记录所在的范围&#xff08;区间&#xff09;&#xff0c;然后逐步缩小范围直到找到或找不到该记录为止。 以处于区间中间位置记录的…

每日一题 --- 替换数字[卡码][Go]

替换数字 题目&#xff1a;54. 替换数字&#xff08;第八期模拟笔试&#xff09; (kamacoder.com) 题目描述 给定一个字符串 s&#xff0c;它包含小写字母和数字字符&#xff0c;请编写一个函数&#xff0c;将字符串中的字母字符保持不变&#xff0c;而将每个数字字符替换为…

Linux appimage如何正确打开

在之前的文章中&#xff0c;提到使用appimage软件非常方便。 但是首次使用会遇到这样的问题&#xff1a; 1. 双击打不开 2. 在终端打开提示&#xff1a; /home/roy/software/appimage/Obsidian-1.5.11.AppImage dlopen(): error loading libfuse.so.2 AppImages require …