一:rocketMq安装
1.官网下载:https://www.apache.org/
(需要jdk8以上环境先安装好)
2.解压,调整工作内存大小
unzip rocketmq-all-4.5.2-bin-release.zip
mv rocketmq-all-4.5.2-bin-release rocketmq
vim runserver.sh
vim runbroker.sh
3,更改配置文件,并开放许服务端口
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUS
brokerIP1=外网服务器ip
namesrvAddr=外网服务器ip:9876
4,启动
sh mqnamesrv
nohup sh mqnamesrv &
sh mqbroker -n localhost:9876 -c ../conf/broker.conf
nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &
mqadmin.cmd updateTopic -n 127.0.0.1:9876 -b 127.0.0.1:10911 -t Topic1
mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
5.测试
export NAMESRV_ADDR=localhost:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
二:搭建项目进行测试
1.pom依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.5.2</version>
</dependency>
2.消息生产
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.*;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.exception.RemotingException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
public class Provider {
public static void main(String[] args) throws Exception {
test3();
}
private static void test3() throws MQBrokerException, RemotingException, InterruptedException, MQClientException, UnsupportedEncodingException {
TransactionMQProducer producer = new TransactionMQProducer("group1");
producer.setNamesrvAddr("ip:port");
producer.setTransactionListener(new TransactionListener() {
public LocalTransactionState executeLocalTransaction(Message message, Object o) {
return LocalTransactionState.COMMIT_MESSAGE;
}
public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {
return null;
}
});
producer.start();
Message msg = new Message("topic1",("事务消息:hello rocketmq ").getBytes("UTF-8"));
SendResult result = producer.sendMessageInTransaction(msg,null);
System.out.println("返回结果:"+result);
}
private static void test2() throws MQBrokerException, RemotingException, InterruptedException, MQClientException {
DefaultMQProducer producer=new DefaultMQProducer("group1");
producer.setNamesrvAddr("ip:port");
producer.start();
Message msg=new Message("topic1","hello rocketMq!".getBytes(StandardCharsets.UTF_8));
SendResult result=producer.send(msg);
System.out.println(result);
producer.shutdown();
}
private static void test() throws MQBrokerException, RemotingException, InterruptedException, MQClientException {
DefaultMQProducer producer=new DefaultMQProducer("group1");
producer.setNamesrvAddr("ip:port");
producer.start();
List<Order> orderList = new ArrayList<Order>();
Order order11 = new Order();
order11.setId("a");
order11.setMsg("主单-1");
orderList.add(order11);
Order order12 = new Order();
order12.setId("a");
order12.setMsg("子单-2");
orderList.add(order12);
Order order13 = new Order();
order13.setId("a");
order13.setMsg("支付-3");
orderList.add(order13);
Order order14 = new Order();
order14.setId("a");
order14.setMsg("推送-4");
orderList.add(order14);
Order order21 = new Order();
order21.setId("b");
order21.setMsg("主单-1");
orderList.add(order21);
Order order22 = new Order();
order22.setId("b");
order22.setMsg("子单-2");
orderList.add(order22);
Order order31 = new Order();
order31.setId("c");
order31.setMsg("主单-1");
orderList.add(order31);
Order order32 = new Order();
order32.setId("c");
order32.setMsg("子单-2");
orderList.add(order32);
Order order33 = new Order();
order33.setId("c");
order33.setMsg("支付-3");
orderList.add(order33);
for (Order order : orderList) {
Message msg=new Message("topic1",order.toString().getBytes(StandardCharsets.UTF_8));
SendResult result=producer.send(msg, new MessageQueueSelector() {
@Override
public MessageQueue select(List<MessageQueue> list, Message message, Object o) {
int mqIndex = order.getId().hashCode() % list.size();
return list.get(mqIndex);
}
},null);
System.out.println(result);
}
producer.shutdown();
}
}
3,消息消费者
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.*;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class Consumer {
public static void main(String[] args) throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
consumer.setNamesrvAddr("ip:port");
consumer.subscribe("topic3", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list,
ConsumeConcurrentlyContext consumeConcurrentlyContext) {
for (MessageExt msg : list) {
System.out.println("消息:" + new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.println("接收消息服务已开启运行");
}
private static void test() throws MQClientException {
DefaultMQPushConsumer consumer=new DefaultMQPushConsumer("group1");
consumer.setNamesrvAddr("ip:port");
consumer.subscribe("topic1","*");
consumer.registerMessageListener(new MessageListenerOrderly() {
@Override
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> list, ConsumeOrderlyContext consumeOrderlyContext) {
for (MessageExt messageExt : list) {
System.out.println(Thread.currentThread().getName()+"消息:"+new String(messageExt.getBody()));
}
return ConsumeOrderlyStatus.SUCCESS;
}
});
consumer.start();
System.out.println("接受消息服务已开启。。。。。。");
}
}