消息发送者的固定步骤
同步发送消息 异步发送消息 单向发送消息:只管把消息发出去 消息消费者的固定步骤
拉模式
DefaultMQPullConsumerImpl 这个消费者类已标记为过期 替换的类是 DefaultLitePullConsumerImpl 推模式 顺序消息 广播消息 延迟消息 批量消息 过滤消息 事务消息 ACL 权限控制 SpringBoot 整合 RocketMQ
消息发送者的固定步骤
创建消息生产者producer,并制定生产者组名 指定Nameserver地址 启动producer 创建消息对象,指定主题Topic、Tag和消息体 发送消息:同步发送、异步发送以及单向发送 关闭生产者producer
DefaultMQProducer producer = new DefaultMQProducer ( "ProducerGroupName" ) ;
producer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
producer. start ( ) ;
Message msg = new Message ( "TopicTest" , "TagA" , "OrderID188" ,
"Hello world" . getBytes ( RemotingHelper . DEFAULT_CHARSET ) ) ;
SendResult sendResult = producer. send ( msg) ;
producer. setRetryTimesWhenSendAsyncFailed ( 3 ) ;
producer. send ( msg, new SendCallback ( ) { } ) ;
producer. sendOneway ( msg) ;
producer. shutdown ( ) ;
消息消费者的固定步骤
创建消费者Consumer,制定消费者组名 指定Nameserver地址 订阅主题Topic和Tag 设置回调函数,处理消息
启动消费者consumer
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer ( "group_name" ) ;
consumer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
consumer. start ( ) ;
Set < MessageQueue > mqs = consumer. fetchSubscribeMessageQueues ( "TopicTest" ) ;
for ( MessageQueue mq : mqs) {
PullResult pullResult = consumer. pullBlockIfNotFound ( mq, null , 0 , 32 ) ;
long offset = pullResult. getNextBeginOffset ( )
switch ( pullResult. getPullStatus ( ) ) {
}
}
consumer. shutdown ( ) ;
DefaultLitePullConsumer litePullConsumer = new DefaultLitePullConsumer ( "lite_pull_consumer" ) ;
litePullConsumer. setConsumeFromWhere ( ConsumeFromWhere . CONSUME_FROM_LAST_OFFSET ) ;
litePullConsumer. subscribe ( "TopicTest" , "*" ) ;
litePullConsumer. start ( ) ;
while ( running) {
List < MessageExt > messageExts = litePullConsumer. poll ( ) ;
}
litePullConsumer. shutdown ( ) ;
DefaultLitePullConsumer litePullConsumer = new DefaultLitePullConsumer ( "group_name" ) ;
litePullConsumer. setAutoCommit ( false ) ;
litePullConsumer. start ( ) ;
Collection < MessageQueue > mqSet = litePullConsumer. fetchMessageQueues ( "TopicTest" ) ;
List < MessageQueue > list = new ArrayList < > ( mqSet) ;
List < MessageQueue > assignList = new ArrayList < > ( ) ;
litePullConsumer. assign ( assignList) ;
litePullConsumer. seek ( assignList. get ( 0 ) , 10 ) ;
while ( running) {
List < MessageExt > messageExts = litePullConsumer. poll ( ) ;
litePullConsumer. commitSync ( ) ;
}
litePullConsumer. shutdown ( ) ;
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer ( "CID_JODIE_1" ) ;
consumer. setNamesrvAddr ( "worker1:9876" ) ;
consumer. subscribe ( "TopicTest" , "*" ) ;
consumer. setConsumeFromWhere ( ConsumeFromWhere . CONSUME_FROM_LAST_OFFSET ) ;
consumer. registerMessageListener ( new MessageListenerConcurrently ( ) {
@Override
public ConsumeConcurrentlyStatus consumeMessage ( List < MessageExt > msgs,
ConsumeConcurrentlyContext context) {
return ConsumeConcurrentlyStatus . CONSUME_SUCCESS ;
}
} ;
consumer. start ( ) ;
顺序消息
DefaultMQProducer producer = new DefaultMQProducer ( "group_name" ) ;
producer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
producer. start ( ) ;
Message msg = new Message ( "OrderTopicTest" , "order_" + orderId, "KEY" + orderId,
( "order_" + orderId+ " step " + j) . getBytes ( RemotingHelper . DEFAULT_CHARSET ) ) ;
SendResult sendResult = producer. send ( msg, new MessageQueueSelector ( ) {
@Override
public MessageQueue select ( List < MessageQueue > mqs, Message msg, Object arg) {
return mqs. get ( index) ;
}
} , orderId) ;
producer. shutdown ( ) ;
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer ( "group_name" ) ;
consumer. setNamesrvAddr ( "localhost:9876" ) ;
consumer. setConsumeFromWhere ( ConsumeFromWhere . CONSUME_FROM_LAST_OFFSET ) ;
consumer. subscribe ( "OrderTopicTest" , "*" ) ;
consumer. registerMessageListener ( new MessageListenerOrderly ( ) {
@Override
public ConsumeOrderlyStatus consumeMessage ( List < MessageExt > msgs,
ConsumeOrderlyContext context) {
context. setAutoCommit ( true ) ;
return ConsumeOrderlyStatus . SUCCESS ;
}
} ) ;
consumer. start ( ) ;
广播消息
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer ( "group_name" ) ;
consumer. setConsumeFromWhere ( ConsumeFromWhere . CONSUME_FROM_LAST_OFFSET ) ;
consumer. setMessageModel ( MessageModel . BROADCASTING ) ;
consumer. subscribe ( "TopicTest" , "*" ) ;
consumer. registerMessageListener ( new MessageListenerConcurrently ( ) {
@Override
public ConsumeConcurrentlyStatus consumeMessage ( List < MessageExt > msgs,
ConsumeConcurrentlyContext context) {
return ConsumeConcurrentlyStatus . CONSUME_SUCCESS ;
}
} ) ;
consumer. start ( ) ;
延迟消息
DefaultMQProducer producer = new DefaultMQProducer ( "group_name" ) ;
producer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
producer. start ( ) ;
Message message = new Message ( "TestTopic" , ( "Hello scheduled message " ) . getBytes ( ) ) ;
message. setDelayTimeLevel ( 3 ) ;
producer. send ( message) ;
producer. shutdown ( ) ;
批量消息
DefaultMQProducer producer = new DefaultMQProducer ( "group_name" ) ;
producer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
producer. start ( ) ;
producer. send ( List < Message > messages) ;
producer. shutdown ( ) ;
过滤消息
DefaultMQProducer producer = new DefaultMQProducer ( "group_name" ) ;
producer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
producer. start ( ) ;
Message msg = new Message ( "TagFilterTest" , "TagA" ,
"Hello world" . getBytes ( RemotingHelper . DEFAULT_CHARSET ) ) ;
SendResult sendResult = producer. send ( msg) ;
producer. shutdown ( ) ;
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer ( "group_name" ) ;
consumer. subscribe ( "TagFilterTest" , "TagA || TagC" ) ;
consumer. registerMessageListener ( new MessageListenerConcurrently ( ) {
@Override
public ConsumeConcurrentlyStatus consumeMessage ( List < MessageExt > msgs,
ConsumeConcurrentlyContext context) {
return ConsumeConcurrentlyStatus . CONSUME_SUCCESS ;
}
} ) ;
consumer. start ( ) ;
DefaultMQProducer producer = new DefaultMQProducer ( "group_name" ) ;
producer. setNamesrvAddr ( "192.168.232.128:9876" ) ;
producer. start ( ) ;
Message msg = new Message ( "SqlFilterTest" , "TagA" ,
( "Hello RocketMQ" ) . getBytes ( RemotingHelper . DEFAULT_CHARSET ) ) ;
msg. putUserProperty ( "a" , String . valueOf ( i) ) ;
SendResult sendResult = producer. send ( msg) ;
producer. shutdown ( ) ;
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer ( "group_name" ) ;
consumer. subscribe ( "SqlFilterTest" ,
MessageSelector . bySql ( "(TAGS is not null and TAGS in ('TagA', 'TagB'))" +
"and (a is not null and a between 0 and 3)" ) ) ;
consumer. registerMessageListener ( new MessageListenerConcurrently ( ) {
@Override
public ConsumeConcurrentlyStatus consumeMessage ( List < MessageExt > msgs,
ConsumeConcurrentlyContext context) {
return ConsumeConcurrentlyStatus . CONSUME_SUCCESS ;
}
} ) ;
consumer. start ( ) ;
事务消息
public class TransactionListenerImpl implements TransactionListener {
@Override
public LocalTransactionState executeLocalTransaction ( Message msg, Object arg) {
msg. getTransactionId ( ) ;
return LocalTransactionState . COMMIT_MESSAGE ;
}
@Override
public LocalTransactionState checkLocalTransaction ( MessageExt msg) {
msg. getTransactionId ( ) ;
return LocalTransactionState . COMMIT_MESSAGE ;
}
}
TransactionListener transactionListener = new TransactionListenerImpl ( ) ;
TransactionMQProducer producer = new TransactionMQProducer ( "group_name" ) ;
producer. setNamesrvAddr ( "127.0.0.1:9876" ) ;
producer. setExecutorService ( executorService) ;
producer. setTransactionListener ( transactionListener) ;
producer. start ( ) ;
Message msg = new Message ( "TopicTest" , "TagA" , "KEY" ,
( "Hello RocketMQ " ) . getBytes ( RemotingHelper . DEFAULT_CHARSET ) ) ;
SendResult sendResult = producer. sendMessageInTransaction ( msg, null ) ;
producer. shutdown ( ) ;
ACL 权限控制
<artifactId>rocketmq-acl</artifactId>
broker.conf -> aclEnable=true
plan_acl.yml
globalWhiteRemoteAddresses :
- 10.10.103.*
- 192.168.0.*
accounts :
- accessKey : RocketMQ
secretKey : 12345678
whiteRemoteAddress :
admin : false
defaultTopicPerm : DENY
defaultGroupPerm : SUB
topicPerms :
- topicA=DENY
- topicB=PUB| SUB
- topicC=SUB
groupPerms :
- groupA=DENY
- groupB=PUB| SUB
- groupC=SUB
- accessKey : rocketmq2
secretKey : 12345678
whiteRemoteAddress : 192.168.1.*
admin : true
SpringBoot 整合 RocketMQ
#NameServer地址
rocketmq.name-server=192.168.232.128:9876
#默认的消息生产者组
rocketmq.producer.group=springBootGroup
@Component
public class SpringProducer {
@Resource
private RocketMQTemplate rocketMQTemplate;
public void sendMessage ( String topic, String msg) {
this . rocketMQTemplate. convertAndSend ( topic, msg) ;
}
public void sendMessageInTransaction ( String topic, String msg) {
String destination = topic + ":" + "TagA" ;
Message < String > message = MessageBuilder . withPayload ( msg) . build ( ) ;
SendResult sendResult = rocketMQTemplate. sendMessageInTransaction (
destination, message, destination) ;
}
}
@RocketMQTransactionListener ( rocketMQTemplateBeanName = "rocketMQTemplate" )
public class MyTransactionImpl implements RocketMQLocalTransactionListener {
@Override
public RocketMQLocalTransactionState executeLocalTransaction ( Message msg, Object arg) {
return RocketMQLocalTransactionState . COMMIT ;
}
@Override
public RocketMQLocalTransactionState checkLocalTransaction ( Message msg) {
return RocketMQLocalTransactionState . COMMIT ;
}
}
@Component
@RocketMQMessageListener ( consumerGroup = "MyConsumerGroup" , topic = "TestTopic" )
public class SpringConsumer implements RocketMQListener < String > {
@Override
public void onMessage ( String message) {
System . out. println ( "Received message : " + message) ;
}
}