简介

本文简单介绍下RocketMQ消息结构,以及发送消息的简单示例,为后续学习RocketMQ消息发送的全流程打下基础。对于最基础的消息发送,我们只需要调用Message(String topic, byte[] body)构造函数new一个Message对象,然后调用producer的send方法便可发送消息了。

消息结构

RocketMQ消息封装类是org.apache.rocketmq.common.message.Message。
类图如下:
消息结构.jpg

Message的基础属性只要包括:消息所属主题topic、消息flag、扩展属性、消息体。
构造函数有如下4个:

  • public Message(String topic, byte[] body)
  • public Message(String topic, String tags, String keys, int flag, byte[] body, boolean waitStoreMsgOK)
  • public Message(String topic, String tags, byte[] body)
  • public Message(String topic, String tags, String keys, byte[] body)

最基础的便是第一个构造函数只需要topic和消息体即可。其他的便是设置些扩展属性,Message扩展属性只要包含下面几个:

  • tag:消息TAG,用于消息过滤。
  • keys:Message索引键,多个用空格隔开,RocketMQ可以根据这些key快速检索到消息。
  • waitStoreMsgOK:消息发送时是否等消息存储完成后再返回。
  • delayTimeLevel:消息延迟级别,用于定时消息或消息重试。

这些扩展属性都会通过方法putProperty存储在Message的properties中。

消息发送示例

public static void main(String[] args) throws MQClientException, InterruptedException {

        DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
        producer.setNamesrvAddr("127.0.0.1:9876");
        producer.start();
        
        try {
            /*
             * Create a message instance, specifying topic and message body.
             */
            Message msg = new Message("TopicTest" , ("Hello RocketMQ ").getBytes(RemotingHelper.DEFAULT_CHARSET));

            /*
             * Call send message to deliver message to one of brokers.
             */
            SendResult sendResult = producer.send(msg);

            System.out.printf("%s%n", sendResult);
        } catch (Exception e) {
            e.printStackTrace();
            Thread.sleep(1000);
        }

        /*
         * Shut down once the producer instance is not longer in use.
         */
        producer.shutdown();
    }

最关键的便是new一个Message对象,只需要topic消息体即可,然后调用producer的send方法便可发送消息。


bugDesigner
22 声望3 粉丝