DefaultMQProducer
类简介
public class DefaultMQProducer extends ClientConfig implements MQProducer
DefaultMQProducer
类是应用用来投递消息的入口,开箱即用,可通过无参构造方法快速创建一个生产者。主要负责消息的发送,支持同步/异步/oneway的发送方式,这些发送方式均支持批量发送。可以通过该类提供的getter/setter方法,调整发送者的参数。DefaultMQProducer
提供了多个send方法,每个send方法略有不同,在使用前务必详细了解其意图。下面给出一个生产者示例代码,点击查看更多示例代码。
public class Producer {
public static void main(String[] args) throws MQClientException {
// 创建指定分组名的生产者
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
// 启动生产者
producer.start();
for (int i = 0; i < 128; i++)
try {
// 构建消息
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
// 同步发送
SendResult sendResult = producer.send(msg);
// 打印发送结果
System.out.printf("%s%n", sendResult);
} catch (Exception e) {
e.printStackTrace();
}
producer.shutdown();
}
}
注意:该类是线程安全的。在配置并启动完成后可在多个线程间安全共享。
字段摘要
类型 | 字段名称 | 描述 |
DefaultMQProducerImpl | defaultMQProducerImpl | 生产者的内部默认实现 |
String | producerGroup | 生产者分组 |
String | createTopicKey | 在发送消息时,自动创建服务器不存在的topic |
int | defaultTopicQueueNums | 创建topic时默认的队列数量 |
int | sendMsgTimeout | 发送消息的超时时间 |
int | compressMsgBodyOverHowmuch | 压缩消息体的阈值 |
int | retryTimesWhenSendFailed | 同步模式下内部尝试发送消息的最大次数 |
int | retryTimesWhenSendAsyncFailed | 异步模式下内部尝试发送消息的最大次数 |
boolean | retryAnotherBrokerWhenNotStoreOK | 是否在内部发送失败时重试另一个broker |
int | maxMessageSize | 消息的最大长度 |
TraceDispatcher | traceDispatcher | 消息追踪器。使用rcpHook来追踪消息 |
构造方法摘要
方法名称 | 方法描述 |
DefaultMQProducer() | 由默认参数值创建一个生产者 |
DefaultMQProducer(final String producerGroup) | 使用指定的分组名创建一个生产者 |
DefaultMQProducer(final String producerGroup, boolean enableMsgTrace) | 使用指定的分组名创建一个生产者,并设置是否开启消息追踪 |
DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic) | 使用指定的分组名创建一个生产者,并设置是否开启消息追踪及追踪topic的名称 |
DefaultMQProducer(RPCHook rpcHook) | 使用指定的hook创建一个生产者 |
DefaultMQProducer(final String producerGroup, RPCHook rpcHook) | 使用指定的分组名及自定义hook创建一个生产者 |
DefaultMQProducer(final String producerGroup, RPCHook rpcHook, boolean enableMsgTrace,final String customizedTraceTopic) | 使用指定的分组名及自定义hook创建一个生产者,并设置是否开启消息追踪及追踪topic的名称 |
使用方法摘要
返回值 | 方法名称 | 方法描述 |
void | createTopic(String key, String newTopic, int queueNum) | 在broker上创建指定的topic |
void | createTopic(String key, String newTopic, int queueNum, int topicSysFlag) | 在broker上创建指定的topic |
long | earliestMsgStoreTime(MessageQueue mq) | 查询最早的消息存储时间 |
List | fetchPublishMessageQueues(String topic) | 获取topic的消息队列 |
long | maxOffset(MessageQueue mq) | 查询给定消息队列的最大offset |
long | minOffset(MessageQueue mq) | 查询给定消息队列的最小offset |
QueryResult | queryMessage(String topic, String key, int maxNum, long begin, long end) | 按关键字查询消息 |
long | searchOffset(MessageQueue mq, long timestamp) | 查找指定时间的消息队列的物理offset |
SendResult | send(Collection msgs) | 同步批量发送消息 |
SendResult | send(Collection msgs, long timeout) | 同步批量发送消息 |
SendResult | send(Collection msgs, MessageQueue messageQueue) | 向指定的消息队列同步批量发送消息 |
SendResult | send(Collection msgs, MessageQueue messageQueue, long timeout) | 向指定的消息队列同步批量发送消息,并指定超时时间 |
SendResult | send(Message msg) | 同步单条发送消息 |
SendResult | send(Message msg, long timeout) | 同步发送单条消息,并指定超时时间 |
SendResult | send(Message msg, MessageQueue mq) | 向指定的消息队列同步发送单条消息 |
SendResult | send(Message msg, MessageQueue mq, long timeout) | 向指定的消息队列同步单条发送消息,并指定超时时间 |
void | send(Message msg, MessageQueue mq, SendCallback sendCallback) | 向指定的消息队列异步单条发送消息,并指定回调方法 |
void | send(Message msg, MessageQueue mq, SendCallback sendCallback, long timeout) | 向指定的消息队列异步单条发送消息,并指定回调方法和超时时间 |
SendResult | send(Message msg, MessageQueueSelector selector, Object arg) | 向消息队列同步单条发送消息,并指定发送队列选择器 |
SendResult | send(Message msg, MessageQueueSelector selector, Object arg, long timeout) | 向消息队列同步单条发送消息,并指定发送队列选择器与超时时间 |
void | send(Message msg, MessageQueueSelector selector, Object arg, SendCallback sendCallback) | 向指定的消息队列异步单条发送消息 |
void | send(Message msg, MessageQueueSelector selector, Object arg, SendCallback sendCallback, long timeout) | 向指定的消息队列异步单条发送消息,并指定超时时间 |
void | send(Message msg, SendCallback sendCallback) | 异步发送消息 |
void | send(Message msg, SendCallback sendCallback, long timeout) | 异步发送消息,并指定回调方法和超时时间 |
TransactionSendResult | sendMessageInTransaction(Message msg, LocalTransactionExecuter tranExecuter, final Object arg) | 发送事务消息,并指定本地执行事务实例 |
TransactionSendResult | sendMessageInTransaction(Message msg, Object arg) | 发送事务消息 |
void | sendOneway(Message msg) | 单向发送消息,不等待broker响应 |
void | sendOneway(Message msg, MessageQueue mq) | 单向发送消息到指定队列,不等待broker响应 |
void | sendOneway(Message msg, MessageQueueSelector selector, Object arg) | 单向发送消息到队列选择器的选中的队列,不等待broker响应 |
void | shutdown() | 关闭当前生产者实例并释放相关资源 |
void | start() | 启动生产者 |
MessageExt | viewMessage(String offsetMsgId) | 根据给定的msgId查询消息 |
MessageExt | public MessageExt viewMessage(String topic, String msgId) | 根据给定的msgId查询消息,并指定topic |
字段详细信息
- producerGroup
private String producerGroup
生产者的分组名称。相同的分组名称表明生产者实例在概念上归属于同一分组。这对事务消息十分重要,如果原始生产者在事务之后崩溃,那么broker可以联系同一生产者分组的不同生产者实例来提交或回滚事务。
默认值:DEFAULT_PRODUCER
注意: 由数字、字母、下划线、横杠(-)、竖线(|)或百分号组成;不能为空;长度不能超过255。 - defaultMQProducerImpl
protected final transient DefaultMQProducerImpl defaultMQProducerImpl
生产者的内部默认实现,在构造生产者时内部自动初始化,提供了大部分方法的内部实现。 - createTopicKey
private String createTopicKey = MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC
在发送消息时,自动创建服务器不存在的topic,需要指定Key,该Key可用于配置发送消息所在topic的默认路由。
默认值:TBW102
建议:测试或者demo使用,生产环境下不建议打开自动创建配置。 - defaultTopicQueueNums
private volatile int defaultTopicQueueNums = 4
创建topic时默认的队列数量。
默认值:4 - sendMsgTimeout
private int sendMsgTimeout = 3000
发送消息时的超时时间。
默认值:3000,单位:毫秒
建议:不建议修改该值,该值应该与broker配置中的sendTimeout一致,发送超时,可临时修改该值,建议解决超时问题,提高broker集群的Tps。 - compressMsgBodyOverHowmuch
private int compressMsgBodyOverHowmuch = 1024 * 4
压缩消息体阈值。大于4K的消息体将默认进行压缩。
默认值:1024 * 4,单位:字节
建议:可通过DefaultMQProducerImpl.setZipCompressLevel方法设置压缩率(默认为5,可选范围[0,9]);可通过DefaultMQProducerImpl.tryToCompressMessage方法测试出compressLevel与compressMsgBodyOverHowmuch最佳值。 - retryTimesWhenSendFailed
private int retryTimesWhenSendFailed = 2
同步模式下,在返回发送失败之前,内部尝试重新发送消息的最大次数。
默认值:2,即:默认情况下一条消息最多会被投递3次。
注意:在极端情况下,这可能会导致消息的重复。 - retryTimesWhenSendAsyncFailed
private int retryTimesWhenSendAsyncFailed = 2
异步模式下,在发送失败之前,内部尝试重新发送消息的最大次数。
默认值:2,即:默认情况下一条消息最多会被投递3次。
注意:在极端情况下,这可能会导致消息的重复。 - retryAnotherBrokerWhenNotStoreOK
private boolean retryAnotherBrokerWhenNotStoreOK = false
同步模式下,消息保存失败时是否重试其他broker。
默认值:false
注意:此配置关闭时,非投递时产生异常情况下,会忽略retryTimesWhenSendFailed配置。 - maxMessageSize
private int maxMessageSize = 1024 * 1024 * 4
消息的最大大小。当消息题的字节数超过maxMessageSize就发送失败。
默认值:1024 * 1024 * 4,单位:字节 - traceDispatcher
private TraceDispatcher traceDispatcher = null
在开启消息追踪后,该类通过hook的方式把消息生产者,消息存储的broker和消费者消费消息的信息像链路一样记录下来。在构造生产者时根据构造入参enableMsgTrace来决定是否创建该对象。
构造方法详细信息
- DefaultMQProducer
public DefaultMQProducer()
创建一个新的生产者。 - DefaultMQProducer
DefaultMQProducer(final String producerGroup)
使用指定的分组名创建一个生产者。
- 入参描述:
类型是否必须缺省值描述
ucerGroupString是DEFAULT_PRODUCER
- DefaultMQProducer
DefaultMQProducer(final String producerGroup, boolean enableMsgTrace)
使用指定的分组名创建一个生产者,并设置是否开启消息追踪。
- 入参描述:
类型是否必须缺省值描述
ucerGroupString是DEFAULT_PRODUCER
leMsgTraceboolean是false
- DefaultMQProducer
DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic)
使用指定的分组名创建一个生产者,并设置是否开启消息追踪及追踪topic的名称。
- 入参描述:
类型是否必须缺省值描述
ucerGroupString是DEFAULT_PRODUCER
ookRPCHook否null
leMsgTraceboolean是false
omizedTraceTopicString否RMQ_SYS_TRACE_TOPIC
- DefaultMQProducer
DefaultMQProducer(RPCHook rpcHook)
使用指定的hook创建一个生产者。
- 入参描述:
类型是否必须缺省值描述
ookRPCHook否null
- DefaultMQProducer
DefaultMQProducer(final String producerGroup, RPCHook rpcHook)
使用指定的分组名及自定义hook创建一个生产者。
- 入参描述:
类型是否必须缺省值描述
ucerGroupString是DEFAULT_PRODUCER
ookRPCHook否null
- DefaultMQProducer
DefaultMQProducer(final String producerGroup, RPCHook rpcHook, boolean enableMsgTrace,final String customizedTraceTopic)
使用指定的分组名及自定义hook创建一个生产者,并设置是否开启消息追踪及追踪topic的名称。
名类型是否必须缺省值描述
oducerGroupString是DEFAULT_PRODUCER生产者的分组名称
cHookRPCHook否null每个远程命令执行后会回调rpcHook
ableMsgTraceboolean是false是否开启消息追踪
stomizedTraceTopicString否RMQ_SYS_TRACE_TOPIC消息跟踪topic的名称
- 入参描述:
使用方法详细信息
createTopic
public void createTopic(String key, String newTopic, int queueNum)
在broker上创建一个topic。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
String | 是 | 访问密钥。 | ||
opic | String | 是 | ||
eNum | int | 是 | 0 | (0, maxIntValue] |
返回值描述:
void
异常描述:
MQClientException - 生产者状态非Running;未找到broker等客户端异常。
createTopic
public void createTopic(String key, String newTopic, int queueNum, int topicSysFlag)
在broker上创建一个topic。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
String | 是 | 访问密钥。 | ||
opic | String | 是 | ||
eNum | int | 是 | 0 | (0, maxIntValue] |
cSysFlag | int | 是 | 0 |
返回值描述:
void
异常描述:
MQClientException - 生产者状态非Running;未找到broker等客户端异常。
earliestMsgStoreTime
public long earliestMsgStoreTime(MessageQueue mq)
查询最早的消息存储时间。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
MessageQueue | 是 | 要查询的消息队列 |
返回值描述:
指定队列最早的消息存储时间。单位:毫秒。
异常描述:
MQClientException - 生产者状态非Running;没有找到broker;broker返回失败;网络异常;线程中断等客户端异常。
fetchPublishMessageQueues
public List<MessageQueue> fetchPublishMessageQueues(String topic)
获取topic的消息队列。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
c | String | 是 |
返回值描述:
传入topic下的消息队列。
异常描述:
MQClientException - 生产者状态非Running;没有找到broker;broker返回失败;网络异常;线程中断等客户端异常。
maxOffset
public long maxOffset(MessageQueue mq)
查询消息队列的最大物理偏移量。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
MessageQueue | 是 | 要查询的消息队列 |
返回值描述:
给定消息队列的最大物理偏移量。
异常描述:
MQClientException - 生产者状态非Running;没有找到broker;broker返回失败;网络异常;线程中断等客户端异常。
minOffset
public long minOffset(MessageQueue mq)
查询给定消息队列的最小物理偏移量。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
MessageQueue | 是 | 要查询的消息队列 |
返回值描述:
给定消息队列的最小物理偏移量。
异常描述:
MQClientException - 生产者状态非Running;没有找到broker;broker返回失败;网络异常;线程中断等客户端异常。
queryMessage
public QueryResult queryMessage(String topic, String key, int maxNum, long begin, long end)
按关键字查询消息。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
c | String | 是 | ||
String | 否 | null | 查找的关键字 | |
um | int | 是 | ||
n | long | 是 | ||
long | 是 | 结束时间戳,单位:毫秒 |
返回值描述:
查询到的消息集合。
异常描述:
MQClientException - 生产者状态非Running;没有找到broker;broker返回失败;网络异常等客户端异常客户端异常。
InterruptedException - 线程中断。
searchOffset
public long searchOffset(MessageQueue mq, long timestamp)
查找指定时间的消息队列的物理偏移量。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
MessageQueue | 是 | 要查询的消息队列。 | ||
stamp | long | 是 |
返回值描述:
指定时间的消息队列的物理偏移量。
异常描述:
MQClientException - 生产者状态非Running;没有找到broker;broker返回失败;网络异常;线程中断等客户端异常。
send
public SendResult send(Collection<Message> msgs)
同步批量发送消息。在返回发送失败之前,内部尝试重新发送消息的最大次数(参见retryTimesWhenSendFailed属性)。未明确指定发送队列,默认采取轮询策略发送。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Collection | 是 | 待发送的消息集合。集合内的消息必须属同一个topic。 |
返回值描述:
批量消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Collection<Message> msgs, long timeout)
同步批量发送消息,如果在指定的超时时间内未完成消息投递,会抛出RemotingTooMuchRequestException。
在返回发送失败之前,内部尝试重新发送消息的最大次数(参见retryTimesWhenSendFailed属性)。未明确指定发送队列,默认采取轮询策略发送。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Collection | 是 | 待发送的消息集合。集合内的消息必须属同一个topic。 | ||
out | long | 是 | 参见sendMsgTimeout属性 |
返回值描述:
批量消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Collection<Message> msgs, MessageQueue messageQueue)
向给定队列同步批量发送消息。
注意:指定队列意味着所有消息均为同一个topic。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Collection | 是 | 待发送的消息集合。集合内的消息必须属同一个topic。 | ||
ageQueue | MessageQueue | 是 |
返回值描述:
批量消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Collection<Message> msgs, MessageQueue messageQueue, long timeout)
向给定队列同步批量发送消息,如果在指定的超时时间内未完成消息投递,会抛出RemotingTooMuchRequestException。
注意:指定队列意味着所有消息均为同一个topic。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Collection | 是 | 待发送的消息集合。集合内的消息必须属同一个topic。 | ||
out | long | 是 | 参见sendMsgTimeout属性 | |
ageQueue | MessageQueue | 是 |
返回值描述:
批量消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Message msg)
以同步模式发送消息,仅当发送过程完全完成时,此方法才会返回。
在返回发送失败之前,内部尝试重新发送消息的最大次数(参见retryTimesWhenSendFailed属性)。未明确指定发送队列,默认采取轮询策略发送。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 |
返回值描述:
消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Message msg, long timeout)
以同步模式发送消息,如果在指定的超时时间内未完成消息投递,会抛出RemotingTooMuchRequestException。仅当发送过程完全完成时,此方法才会返回。
在返回发送失败之前,内部尝试重新发送消息的最大次数(参见retryTimesWhenSendFailed属性)。未明确指定发送队列,默认采取轮询策略发送。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
out | long | 是 | 参见sendMsgTimeout属性 |
返回值描述:
消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Message msg, MessageQueue mq)
向指定的消息队列同步发送单条消息。仅当发送过程完全完成时,此方法才会返回。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
MessageQueue | 是 | 待投递的消息队列。 |
返回值描述:
消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Message msg, MessageQueue mq, long timeout)
向指定的消息队列同步发送单条消息,如果在指定的超时时间内未完成消息投递,会抛出RemotingTooMuchRequestException。仅当发送过程完全完成时,此方法才会返回。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
out | long | 是 | 参见sendMsgTimeout属性 | |
MessageQueue | 是 | 待投递的消息队列。指定队列意味着待投递消息均为同一个topic。 |
返回值描述:
消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public void send(Message msg, MessageQueue mq, SendCallback sendCallback)
向指定的消息队列异步发送单条消息,异步发送调用后直接返回,并在在发送成功或者异常时回调sendCallback
,所以异步发送时sendCallback
参数不能为null,否则在回调时会抛出NullPointerException
。
异步发送时,在成功发送前,其内部会尝试重新发送消息的最大次数(参见retryTimesWhenSendAsyncFailed属性)。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
MessageQueue | 是 | 待投递的消息队列。指定队列意味着待投递消息均为同一个topic。 | ||
Callback | SendCallback | 是 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
send
public void send(Message msg, MessageQueue mq, SendCallback sendCallback, long timeout)
向指定的消息队列异步发送单条消息,异步发送调用后直接返回,并在在发送成功或者异常时回调sendCallback
,所以异步发送时sendCallback
参数不能为null,否则在回调时会抛出NullPointerException
。
若在指定时间内消息未发送成功,回调方法会收到RemotingTooMuchRequestException异常。
异步发送时,在成功发送前,其内部会尝试重新发送消息的最大次数(参见retryTimesWhenSendAsyncFailed属性)。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
MessageQueue | 是 | 待投递的消息队列。 | ||
Callback | SendCallback | 是 | ||
out | long | 是 | 参见sendMsgTimeout属性 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
send
public SendResult send(Message msg, MessageQueueSelector selector, Object arg)
向通过MessageQueueSelector
计算出的队列同步发送消息。
可以通过自实现MessageQueueSelector
接口,将某一类消息发送至固定的队列。比如:将同一个订单的状态变更消息投递至固定的队列。
注意:此消息发送失败内部不会重试。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
ctor | MessageQueueSelector | 是 | ||
Object | 否 | 供队列选择器使用的参数对象。 |
返回值描述:
消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public SendResult send(Message msg, MessageQueueSelector selector, Object arg, long timeout)
向通过MessageQueueSelector
计算出的队列同步发送消息,并指定发送超时时间。
可以通过自实现MessageQueueSelector
接口,将某一类消息发送至固定的队列。比如:将同一个订单的状态变更消息投递至固定的队列。
注意:此消息发送失败内部不会重试。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
ctor | MessageQueueSelector | 是 | ||
Object | 否 | 供队列选择器使用的参数对象。 | ||
out | long | 是 | 参见sendMsgTimeout属性 |
返回值描述:
消息的发送结果,包含msgId,发送状态等信息。
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
MQBrokerException - broker发生错误。
InterruptedException - 发送线程中断。
RemotingTooMuchRequestException - 发送超时。
send
public void send(Message msg, MessageQueueSelector selector, Object arg, SendCallback sendCallback)
向通过MessageQueueSelector
计算出的队列异步发送单条消息,异步发送调用后直接返回,并在在发送成功或者异常时回调sendCallback
,所以异步发送时sendCallback
参数不能为null,否则在回调时会抛出NullPointerException
。
异步发送时,在成功发送前,其内部会尝试重新发送消息的最大次数(参见retryTimesWhenSendAsyncFailed属性)。
可以通过自实现MessageQueueSelector
接口,将某一类消息发送至固定的队列。比如:将同一个订单的状态变更消息投递至固定的队列。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
ctor | MessageQueueSelector | 是 | ||
Object | 否 | 供队列选择器使用的参数对象。 | ||
Callback | SendCallback | 是 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
send
public void send(Message msg, MessageQueueSelector selector, Object arg, SendCallback sendCallback, long timeout)
向通过MessageQueueSelector
计算出的队列异步发送单条消息,异步发送调用后直接返回,并在在发送成功或者异常时回调sendCallback
,所以异步发送时sendCallback
参数不能为null,否则在回调时会抛出NullPointerException
。
异步发送时,在成功发送前,其内部会尝试重新发送消息的最大次数(参见retryTimesWhenSendAsyncFailed属性)。
可以通过自实现MessageQueueSelector
接口,将某一类消息发送至固定的队列。比如:将同一个订单的状态变更消息投递至固定的队列。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
ctor | MessageQueueSelector | 是 | ||
Object | 否 | 供队列选择器使用的参数对象。 | ||
Callback | SendCallback | 是 | ||
out | long | 是 | 参见sendMsgTimeout属性 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
send
public void send(Message msg, SendCallback sendCallback)
异步发送单条消息,异步发送调用后直接返回,并在在发送成功或者异常时回调sendCallback
,所以异步发送时sendCallback
参数不能为null,否则在回调时会抛出NullPointerException
。
异步发送时,在成功发送前,其内部会尝试重新发送消息的最大次数(参见retryTimesWhenSendAsyncFailed属性)。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
Callback | SendCallback | 是 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
send
public void send(Message msg, SendCallback sendCallback, long timeout)
异步发送单条消息,异步发送调用后直接返回,并在在发送成功或者异常时回调sendCallback
,所以异步发送时sendCallback
参数不能为null,否则在回调时会抛出NullPointerException
。
异步发送时,在成功发送前,其内部会尝试重新发送消息的最大次数(参见retryTimesWhenSendAsyncFailed属性)。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
Callback | SendCallback | 是 | ||
out | long | 是 | 参见sendMsgTimeout属性 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
sendMessageInTransaction
public TransactionSendResult sendMessageInTransaction(Message msg, LocalTransactionExecuter tranExecuter, final Object arg)
发送事务消息。该类不做默认实现,抛出RuntimeException
异常。参见:TransactionMQProducer
类。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待投递的事务消息 | ||
Executer | | 是 | ||
Object | 是 | 供本地事务执行程序使用的参数对象 |
返回值描述:
事务结果,参见:LocalTransactionState
类。
异常描述:
RuntimeException - 永远抛出该异常。
sendMessageInTransaction
public TransactionSendResult sendMessageInTransaction(Message msg, final Object arg)
发送事务消息。该类不做默认实现,抛出RuntimeException
异常。参见:TransactionMQProducer
类。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待投递的事务消息 | ||
Object | 是 | 供本地事务执行程序使用的参数对象 |
返回值描述:
事务结果,参见:LocalTransactionState
类。
异常描述:
RuntimeException - 永远抛出该异常。
sendOneway
public void sendOneway(Message msg)
以oneway形式发送消息,broker不会响应任何执行结果,和UDP类似。它具有最大的吞吐量但消息可能会丢失。
可在消息量大,追求高吞吐量并允许消息丢失的情况下使用该方式。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待投递的消息 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
sendOneway
public void sendOneway(Message msg, MessageQueue mq)
向指定队列以oneway形式发送消息,broker不会响应任何执行结果,和UDP类似。它具有最大的吞吐量但消息可能会丢失。
可在消息量大,追求高吞吐量并允许消息丢失的情况下使用该方式。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待投递的消息 | ||
MessageQueue | 是 | 待投递的消息队列 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
sendOneway
public void sendOneway(Message msg, MessageQueueSelector selector, Object arg)
向通过MessageQueueSelector
计算出的队列以oneway形式发送消息,broker不会响应任何执行结果,和UDP类似。它具有最大的吞吐量但消息可能会丢失。
可在消息量大,追求高吞吐量并允许消息丢失的情况下使用该方式。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
Message | 是 | 待发送的消息。 | ||
ctor | MessageQueueSelector | 是 | ||
Object | 否 | 供队列选择器使用的参数对象。 |
返回值描述:
void
异常描述:
MQClientException - broker不存在或未找到;namesrv地址为空;未找到topic的路由信息等客户端异常。
RemotingException - 网络异常。
InterruptedException - 发送线程中断。
shutdown
public void shutdown()
关闭当前生产者实例并释放相关资源。
入参描述:
无。
返回值描述:
void
异常描述:
start
public void start()
启动生产者实例。在发送或查询消息之前必须调用此方法。它执行了许多内部初始化,比如:检查配置、与namesrv建立连接、启动一系列心跳等定时任务等。
入参描述:
无。
返回值描述:
void
异常描述:
MQClientException - 初始化过程中出现失败。
viewMessage
public MessageExt viewMessage(String offsetMsgId)
根据给定的msgId查询消息。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
etMsgId | String | 是 |
返回值描述:
返回MessageExt
,包含:topic名称,消息题,消息ID,消费次数,生产者host等信息。
异常描述:
RemotingException - 网络层发生错误。
MQBrokerException - broker发生错误。
InterruptedException - 线程被中断。
MQClientException - 生产者状态非Running;msgId非法等。
viewMessage
public MessageExt viewMessage(String topic, String msgId)
根据给定的msgId查询消息,并指定topic。
入参描述:
类型 | 是否必须 | 默认值 | 值范围 | 说明 |
d | String | 是 | ||
c | String | 是 |
返回值描述:
返回MessageExt
,包含:topic名称,消息题,消息ID,消费次数,生产者host等信息。
异常描述:
RemotingException - 网络层发生错误。
MQBrokerException - broker发生错误。
InterruptedException - 线程被中断。
MQClientException - 生产者状态非Running;msgId非法等。