# rocketmq-demo **Repository Path**: itbac/rocketmq-demo ## Basic Information - **Project Name**: rocketmq-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-07 - **Last Updated**: 2021-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rocketmq-demo #### 介绍 ### 1.base包,基本样例 1.1 producer生产者 SyncProducer 发送同步消息:客户端等待broker响应 AsyncProducer 发送异步消息:客户端不等待broker响应,通过回调方法获取结果。 OnewayProducer 发送单向消息:不关心发送结果,例如:发送日志 1.2 consumer消费者 Consumer消费者有2种消费模式 1.2.1 负载均衡模式(默认),MessageModel.CLUSTERING ,消息只能被一个消费者消费。 1.2.2 广播模式,MessageModel.BROADCASTING ,消息可以被多个消费者消费。 ### 2.order包,顺序消息示例 2.1 OrderMsgProducer 顺序消息生产者 发送消息时,设置消息队列的选择器SelectMessageQueueByHash,同一个订单的不同业务,发给同一个queue队列,保证消息顺序发送到MQ。 2.2 OrderMsgConsumer 顺序消息消费者 接收消息时,注册消息监听器,使用 MessageListenerOrderly 保证一个线程消费同一个queue。保证消息顺序消费。 ### 3.delay包,延迟消息示例 3.1 Producer生产者,发送的消息,设置延迟级别,message.setDelayTimeLevel(3) 3表示延迟10秒 messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 3.2 Consumer消费者,延迟消息的消费者不需要做特殊处理,由broker来实现延迟消息。 ### 4.batch包,批量消息示例 4.1 Producer生产者,发送消息时,producer.send(msgList),发送一个集合的消息,注意不要大于4M,否则会抛异常。 4.2 ListSplitter消息拆分迭代器,把大的消息,拆分后再发送。客户端发送的消息越大,等待服务端响应的时间会更长,可能会出现超时异常。 ### 5.filter包,过滤消息示例 过滤消息是指,消费时,选择指定的消息消费。 5.1 tag包,消费时,选择指定的tag消费。 5.2 sql包 5.2.1 发送消息时,对消息设置额外属性, message.putUserProperty("abc","1") 5.2.2 消费消息时,订阅消息,使用消息选择器,并且写上SQL语法 consumer.subscribe("filterSql", MessageSelector.bySql("abc>5")); 5.2.3 brocker启动时,brocker.conf配置文件中开启属性过滤配置 enablePropertyFilter=true ### 6.transaction包,事务消息示例 6.1 Producer生产者使用TransactionMQProducer 支持事务的生产者,并设置事务监听器 producer.setTransactionListener(), 在监听器中实现执行本地事务的方法executeLocalTransaction,并设置half message半消息的事务状态为提交LocalTransactionState.COMMIT_MESSAGE,或者回滚LocalTransactionState.ROLLBACK_MESSAGE executeLocalTransaction方法中设置 LocalTransactionState.UNKNOW的消息,会再回调checkLocalTransaction 方法。 6.2 发送消息时,要发送事务消息 producer.sendMessageInTransaction(message, null);