前面我们简单的介绍了常用的消息中间件,本篇我们主要介绍消息中间件RocketMQ生产者的使用,RocketMQ实现了两种类型的
生产者DefaultMQProducer和TransactionMQProducer,前者生产普通消息,后者生产事务消息。而本篇我们主要介绍DefaultMQProducer的使用。在阅读本篇之前你需要了解RocketMQ的总体结构和RocketMQ的相关概念,这些内容RocketMQ官网已经写的非常清楚,如果不清楚的可以参考RocketMQ GitHub。
在此之前我们首先介绍Message的使用,Message是RocketMQ对消息的封装,我们也只能将消息封装为Message实例,才能通过RocketMQ发送出去。首先我们看下RocketMQ对消息的定义:
public class Message implements Serializable {
private static final long serialVersionUID = 8445773977080406428L;
//主题可以通过RocketMQ Console创建
private String topic;
//消息扩展信息,Tag、keys、消息延迟级别都保存在Map中
private Map<String, String> properties;
//目前没用
private int flag;
//消息体,字节数组
private byte[] body;
//事务ID
private String transactionId;
//设置消息的key,多个Key可以用MessageConst.KEY_SEPARATOR分隔或者直接调用第二个方法,传入一个集合
//最终保存在 properties中, key为MessageConst.PROPERTY_KEYS
public void setKeys(String keys) {}
public void setKeys(Collection<String> keys) { }
//设置主题,也可以通过构造传入
public void setTopic(String topic) {}
//设置Tag,消息过滤标记,用户可以订阅topic的某些Tag
public void setTags(String tags) {}
//设置延迟级别,延迟多久消费者可以消费
public void setDelayTimeLevel(int level) {}
//设置消息体,可通过构造传入
public void setBody(byte[] body) {}
//设置是否等消息存储成功
public void setWaitStoreMsgOK(boolean waitStoreMsgOK) {}
//设置用户ID
public void setBuyerId(String buyerId) {}
//设置事务ID
public void setTransactionId(String transactionId) {}
//设置属性properties key为name value为value
void putProperty(final String name, final String value) {}
//放置其他扩展信息,最终调用putProperty(final String name, final String value)
public void putUserProperty(final String name, final String value) {}
//设置properties
void setProperties(Map<String, String> properties) { }
//设置flag
public void setFlag(int flag) {}
}
在学习Message的结构之后,我们开始学习DefaultMQProducer是如何发送消息的,DefaultMQProducer提供了多个API用于发送不同类型的消息。如下为DefaultMQProducer提供的消息API。方法的异常以及主要逻辑这里不再展示,可以参考源码。<