顺序消息发送者|学习笔记

简介: 快速学习顺序消息发送者

开发者学堂课程【RocketMQ知识精讲与项目实战(第一阶段)顺序消息发送者】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/702/detail/12383


顺序消息发送者

 

内容介绍

一、前提

二、实现

三、回顾

 

一、前提

一个订单的顺序流程是:创建、付款、推送、完成。订单号相同的消息会被先后发送

到同一个队列中,消费时,同一个 Orderld 获取到的肯定是同一个队列。

同一个人在进行订单消息消费时,要保证顺序的一致性。这是我们的需求。

 

二、实现

创建实体类 orderstep,这个类用它来创建、模拟订单数据,有两个属性,一个是订单id,一个是订单突出。

Buildorders 为我们提供了静态方法,方便去构建静态结合方法,这时有三个订单:

Public staticList buildorders(

//1039L 创建 付款 推送 完成

//1065L 创建 付款

//7235L 创建 付款

不管发送几个消息,必须保证在消费时针对一个订单消费顺序是一致的

先编写消息生产者

创建 producer

发消息流程和之前是一致的,基本代码如下:

package com.theima.mq.rocketmq.order;import org.apache.rocketmq.client.producer.DefaultMQProducer;public class Producer (public static void main(String[] args)throws Exception //1.创建消息生产者 producer, 并制定生产者组名DefaultMOProducer producer= new DefaultMQProducer( producerGroup:"group1");

//2.指定Nameserver地址producer.setNamesrvAddr("192.168.25.135:9876;192.168.25.138:9876");

//3.后动 producer

producer.start();

发送订单集合消息内容

//构建消息集合
List ordersteps= OrderStep.buildOrders();

/发送消息
for (int i=0;icordersteps.size();i++)(

String body = ordersteps.get(i)+"";

Message message = new Message( topic"orderTopic",tags:

"Order",keys: "i"+i,body.getBytes(Ol);

参数一:消息对象

参数二:消息队列的选择器

参数三:选择队列的业务标识(订单ID)

producer.send(msg, new MessageQueueSelector()

@override

public MessageQueue select(List mqs, Message msg,

object arg) (return null;),orderId);

此时消息内容编写完毕。

orderId 从当前消息订单中来。

ordersteps.get(i.getorderidb;//这就是我们给他的订单id

//根据订单 id,应该怎么选择?

SendResult sendResult = producer.send(message, new

MessageQueueSelector()(

@param mqs:队列集合

@param msg: 消息对象

@paramarg: 业务标识的参数

@return

//对应队列,订单选择

@override

public MessageQueueselect(List mqs, Message msg, object arg)

long orderId =(long) arg;

long index = orderId % mqs.size();

return mqs.get((int) index);

), ordersteps.get(i).getOrderId());

System.out.println("发送结果:"+sendResult);

//一切都完成时,停止

Producer:shutdown

 

三、回顾

创建 producer,再发送消息,获得了消息订单的集合,

去辨认每个订单消息。

再去构建了一个消息对象,在发送消息的时候注意:用了三个参数的 send 方法,其中,第二个参数是消息队列的选择器,根据消息的业务标识去选择,第三个参数把消息业务标识传递了过去。

根据订单 id 对所有消息队列的分析,确定了队列对象,直接发送。下一次再来订单时,只要订单 id 一样,最终选择的队列也一样,保证了一个订单进入固定的一个队列中去。这时,消息的生产者编写就实现完了。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1084 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1751 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
694 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
660 14
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
437 5