rocketmq 示例
*****************************
引入 jar 包
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.5.2</version>
</dependency>
*****************************
相关类与接口
MQProducer:消息发送接口
public interface MQProducer extends MQAdmin {
void start() throws MQClientException;
void shutdown();
List<MessageQueue> fetchPublishMessageQueues(String var1) throws MQClientException;
**********
消息轮询发送
SendResult send(Message var1) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
SendResult send(Message var1, long var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
void send(Message var1, SendCallback var2) throws MQClientException,
RemotingException, InterruptedException;
void send(Message var1, SendCallback var2, long var3) throws MQClientException, RemotingException, InterruptedException;
void sendOneway(Message var1) throws MQClientException, RemotingException, InterruptedException;
**********
发送到指定队列
SendResult send(Message var1, MessageQueue var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
SendResult send(Message var1, MessageQueue var2, long var3) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
void send(Message var1, MessageQueue var2, SendCallback var3) throws MQClientException, RemotingException, InterruptedException;
void send(Message var1, MessageQueue var2, SendCallback var3, long var4) throws MQClientException, RemotingException, InterruptedException;
void sendOneway(Message var1, MessageQueue var2) throws MQClientException, RemotingException, InterruptedException;
**********
根据参数var3使用MessageQueueSelector选择消息发送队列
SendResult send(Message var1, MessageQueueSelector var2, Object var3) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
SendResult send(Message var1, MessageQueueSelector var2, Object var3, long var4) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
void send(Message var1, MessageQueueSelector var2, Object var3, SendCallback var4) throws MQClientException, RemotingException, InterruptedException;
void send(Message var1, MessageQueueSelector var2, Object var3, SendCallback var4, long var5) throws MQClientException, RemotingException, InterruptedException;
void sendOneway(Message var1, MessageQueueSelector var2, Object var3) throws MQClientException, RemotingException, InterruptedException;
**********
发送事务消息
TransactionSendResult sendMessageInTransaction(Message var1, LocalTransactionExecuter var2, Object var3) throws MQClientException;
TransactionSendResult sendMessageInTransaction(Message var1, Object var2) throws MQClientException;
**********
批量发送消息
SendResult send(Collection<Message> var1) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
SendResult send(Collection<Message> var1, long var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
SendResult send(Collection<Message> var1, MessageQueue var2) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
SendResult send(Collection<Message> var1, MessageQueue var2, long var3) throws MQClientException, RemotingException, MQBrokerException, InterruptedException;
}
Message:消息类
public class Message implements Serializable {
private static final long serialVersionUID = 8445773977080406428L;
private String topic;
private int flag;
private Map<String, String> properties;
private byte[] body;
private String transactionId;
public Message() {
}
public Message(String topic, byte[] body) {
this(topic, "", "", 0, body, true);
}
public Message(String topic, String tags, String keys, int flag, byte[] body, boolean waitStoreMsgOK) {
//设置消息topic、tags、keys、falg、body、waitStoreMsgOK
this.topic = topic;
this.flag = flag;
this.body = body;
if (tags != null && tags.length() > 0) {
this.setTags(tags);
}
if (keys != null && keys.length() > 0) {
this.setKeys(keys);
}
this.setWaitStoreMsgOK(waitStoreMsgOK);
}
public Message(String topic, String tags, byte[] body) {
this(topic, tags, "", 0, body, true);
}
public Message(String topic, String tags, String keys, byte[] body) {
this(topic, tags, keys, 0, body, true);
}
void putProperty(String name, String value) {
void clearProperty(String name) {
public void putUserProperty(String name, String value) {
public String getUserProperty(String name) {
public String getProperty(String name) {
public String getTopic() {
public void setTopic(String topic) {
public String getTags() {
public void setTags(String tags) {
public String getKeys() {
public void setKeys(Collection<String> keys) {
public void setKeys(String keys) {
public int getDelayTimeLevel() {
public void setDelayTimeLevel(int level) {
public boolean isWaitStoreMsgOK() {
public void setWaitStoreMsgOK(boolean waitStoreMsgOK) {
public void setInstanceId(String instanceId) {
public int getFlag() {
public void setFlag(int flag) {
public byte[] getBody() {
public void setBody(byte[] body) {
public Map<String, String> getProperties() {
void setProperties(Map<String, String> properties) {
public String getBuyerId() {
public void setBuyerId(String buyerId) {
public String getTransactionId() {
public void setTransactionId(String transactionId) {
public String toString() {
return "Message{topic='" + this.topic + '\'' + ", flag=" + this.flag + ", properties=" + this.properties + ", body=" + Arrays.toString(this.body) + ", transactionId='" + this.transactionId + '\'' + '}';
}
}
MQConsumer:消息消费接口
public interface MQConsumer extends MQAdmin {
void sendMessageBack(MessageExt var1, int var2, String var3) throws RemotingException, MQBrokerException, InterruptedException, MQClientException;
Set<MessageQueue> fetchSubscribeMessageQueues(String var1) throws MQClientException;
}
MQPushConsumer:broker采用push方式,消费端消费接口
public interface MQPushConsumer extends MQConsumer {
void start() throws MQClientException;
void shutdown();
void registerMessageListener(MessageListenerConcurrently var1); //消费端并发消费
void registerMessageListener(MessageListenerOrderly var1); //消费端顺序消费
void subscribe(String var1, String var2) throws MQClientException; //订阅topic(var1),使用tag过滤
void subscribe(String var1, MessageSelector var2) throws MQClientException;
//订阅topic(var1),使用messageSelector过滤
void unsubscribe(String var1);
void updateCorePoolSize(int var1);
void suspend();
void resume();
}
MessageSelector:消息过滤
public class MessageSelector {
private String type;
private String expression;
private MessageSelector(String type, String expression) {
this.type = type;
this.expression = expression;
}
public static MessageSelector bySql(String sql) { //使用sql过滤
return new MessageSelector("SQL92", sql);
}
public static MessageSelector byTag(String tag) { //使用tag过滤
return new MessageSelector("TAG", tag);
}
public String getExpressionType() {
return this.type;
}
public String getExpression() {
return this.expression;
}
}
*****************************
示例
*******************
producer 端
@Service
public class ProducerService {
@Value("${rocketmq.producerGroup}")
private String producerGroup;
@Value("${rocketmq.namesrv}")
private String namesrv;
private DefaultMQProducer producer;
************************
创建producer
@PostConstruct
public void initDefaultMQProducer(){
producer=new DefaultMQProducer(producerGroup);
producer.setNamesrvAddr(namesrv);
producer.setRetryTimesWhenSendFailed(2);
try{
producer.start();
}catch (Exception e){
e.printStackTrace();
}
}
********************************
同步发送
public void sendInSync(){
for (int i=0;i<100;i++){
try{
Message message=new Message("topic","sync",("瓜田李下"+i).getBytes());
SendResult result=producer.send(message);
System.out.println(result);
}catch (Exception e){
e.printStackTrace();
}
}
}
********************************
异步发送
public void sendInAsync(){
for (int i=0;i<100;i++){
try{
Message message=new Message("topic","async",("瓜田李下 2"+i).getBytes());
producer.send(message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("发送成功");
System.out.println(sendResult);
}
@Override
public void onException(Throwable throwable) {
System.out.println("发送失败");
System.out.println(throwable.getMessage());
}
});
}catch (Exception e){
e.printStackTrace();
}
}
}
*******************************
单向发送
public void sendOneWay(){
for (int i=0;i<100;i++){
try{
Message message=new Message("topic","oneWay",("瓜田李下 3"+i).getBytes());
producer.sendOneway(message);
}catch (Exception e){
e.printStackTrace();
}
}
}
@PreDestroy
public void destroy(){
if(producer!=null){
producer.shutdown();
}
}
}
*******************
consumer 端
@Service
public class ConsumerService {
@Value("${rocketmq.consumerGroup}")
private String consumerGroup;
@Value("${rocketmq.namesrv}")
private String namesrv;
@PostConstruct
public void consumeSync(){
DefaultMQPushConsumer consumer=new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(namesrv);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
try{
Thread.sleep(4000);
consumer.subscribe("topic","*");
consumer.registerMessageListener((MessageListenerConcurrently) (list, consumeConcurrentlyContext) -> {
try{
for(MessageExt messageExt:list){
String body=new String(messageExt.getBody());
System.out.println(body);
System.out.println("消费时间:"+System.currentTimeMillis());
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}catch (Exception e){
System.out.println("消费失败");
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
});
}catch (Exception e){
e.printStackTrace();
}
try{
consumer.start();
}catch (Exception e){
e.printStackTrace();
}
}
}
*****************************
控制台输出