RocketMQ 生产者启动流程

411 阅读1分钟

RocketMQ 生产者启动流程

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

生产者是消息的发送方,生产者将消息投递到 Broker 中即返回, 生产者代码:

public class ProducerDemo {
    public static void main(String[] args) throws Exception {
        //1 创建生产者,并指定producerGroup
        DefaultMQProducer producer = new DefaultMQProducer("MY_PRODUCER_GROUP");
        producer.setNamesrvAddr("10.227.12.225:9876");//多个地址可以使用";"进行分割
        //2 启动
        producer.start();
        //3 构建消息
        String messageBoddy = "this is message body";
        String topic = "FailOverTest";
        Message msg = new Message(topic, messageBoddy.getBytes());
        //4 发送消息
        SendResult result = producer.send(msg);
        //5 打印消息发送结果
        System.out.println(result);
        //6 停止
        producer.shutdown();
    }
}

可以看到,一个生产者启动流程一般包含如下步骤:

  1. 创建生产者,并指定producerGroup
  2. 启动生产者
  3. 构建消息
  4. 发送消息
  5. 记录消息发送结果
  6. 结束

生产者创建

DefaultMQProducerRocketMQ 中生产者的默认实现,在创建一个生产者时,需要指定生产者所属的生产者组(producer group)。

生产者启动

调用DefaultMQProducer类的start方法进行启动。start 方法包含进行以下步骤:

  1. 检查生产者名字是否合法
  • 生产者组名称不能为null或者空串
  • 长度不能超过255个字符
  • 需要满足正则表达式:`^[%|a-zA-Z0-9_-]+$``,即只能由数字、字母、下划线、中划线和%组成,
  • 不能是RocketMQ保留的生产者组名称"DEFAULT_PRODUCER"。
  1. 修改instanceName的进程Id

  2. 创建 MQClientInstance

生产者和消费者中,通一个JVM ,应该是一个MQClientInstance 4. 生产者注册 mQClientFactory