maven项目pom.xml中导包
<dependencies>
<!-- RocketMQ -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-all</artifactId>
<version>4.2.0</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
生产者
package exercise1.helloworld;
import java.io.UnsupportedEncodingException;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;
public class Producer {
public static void main(String[] args) throws MQClientException, RemotingException, MQBrokerException, InterruptedException, UnsupportedEncodingException {
//01new一个默认的message queue 生产者,一定要给它一个名字
DefaultMQProducer producer = new DefaultMQProducer("libo-1");
//02给这个生产者设置注册的地址,本地的9876port
producer.setNamesrvAddr("localhost:9876");
//03启动producer,启动不代表发送了消息
producer.start();
//04准备要发送的Message,指定主题,标签,和消息
Message msg = new Message("test1","tag1","李波".getBytes("utf-8"));
//05因为发完消息后是需要有回馈的,发送结果(顾名思义)
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);
//06关闭producer
producer.shutdown();
}
}
消费者
package exercise1.helloworld;
import java.util.List;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
public class Consumer {
public static void main(String[] args) throws MQClientException {
//01new 一个默认的推送消费者,同样要取个名字
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("liboconsumer");
//02消费者同样要注册
consumer.setNamesrvAddr("localhost:9876");
//03消费者从队列的哪里开始拿消息呢?
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
//04消费者订阅
consumer.subscribe("test1","*");
//05用监听器接收,所以消费者需要注册一个监听器
//参数只有一个,叫做当前的消息监听者,重写这个监听者的消费消息的方法
//返回当前的消费状态(真正的参数)
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
try {
String str = new String(msgs.get(0).getBody(),"utf-8");
System.out.println(str);
} catch (Exception e) {
e.printStackTrace();
//如果出现异常的话,一会再请求,时间逐渐延长,达到一定次数
//不在请求,将错误记录日志
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//06启动消费者
consumer.start();
System.out.println("消费者启动了");
}
}
//namesrv启动
start mqnamesrv.cmd
//broker启动
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
//console启动
java -jar rocketmq-console-ng-1.0.0.jar