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

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

开发者学堂课程【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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
25天前
|
消息中间件 存储 负载均衡
RocketMQ 消息的顺序和重复
这篇文章探讨了RocketMQ中消息顺序和重复的问题,解释了为什么RocketMQ不保证消息顺序和不重复,并提供了解决这些问题的策略,包括消费端幂等性处理和使用日志表记录已处理消息ID,同时介绍了RocketMQ的事务消息、Producer和Consumer的最佳实践,以及其他配置和RocketMQ的基本概念。
24 0
RocketMQ 消息的顺序和重复
|
2月前
|
消息中间件 SQL RocketMQ
【RocketMQ系列五】消息示例-顺序消息&延迟消息&广播消息的实现
【RocketMQ系列五】消息示例-顺序消息&延迟消息&广播消息的实现
55 1
|
4月前
|
消息中间件 存储 Kafka
几种 MQ 顺序消息的实现方式
几种 MQ 顺序消息的实现方式
|
消息中间件 存储 缓存
Kafka快速入门(生产者)同步异步发送、分区、消息精确一次发送、幂等性、事务
Kafka快速入门(生产者)同步异步发送、分区、消息精确一次发送、幂等性、事务
Kafka快速入门(生产者)同步异步发送、分区、消息精确一次发送、幂等性、事务
|
消息中间件 存储 RocketMQ
【视频】顺序消息| 学习笔记
快速学习【视频】顺序消息
【视频】顺序消息| 学习笔记
|
消息中间件 Java 开发者
消息类型-顺序消息|学习笔记
快速学习消息类型-顺序消息
105 0
消息类型-顺序消息|学习笔记
|
消息中间件 Java
浅析什么是顺序消息?
在日常开发中,或多或少的都遇到过顺序消息的使用场景,那么为什么要使用顺序消息呢?如果不使用顺序消息会有什么问题吗?市面上的消息中间件又是如何实现的呢?
210 0
浅析什么是顺序消息?
|
消息中间件 RocketMQ 开发者
顺序消息原理|学习笔记
快速学习顺序消息原理
顺序消息原理|学习笔记
|
存储 消息中间件 Linux
多类型业务消息专题-顺序消息 | 学习笔记
快速学习多类型业务消息专题-顺序消息
多类型业务消息专题-顺序消息 | 学习笔记
|
消息中间件 缓存 负载均衡
消息发送2-消息路由查找|学习笔记
快速学习消息发送2-消息路由查找
消息发送2-消息路由查找|学习笔记