1、引入pom.xml
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
2、常量配置
public class JmsConfig {
/**
* 端口
*/
public static final String NAME_SERVER = "192.168.0.55:9876";
/**
* topic,消息依賴於topic
*/
public static final String TOPIC = "pay_test_topic";
}
3、生產者配置
@Component
public class PayProducer {
/**
* 生產組,生產者必須在生產組內
*/
private String producerGroup = "pay_producer_group";
private DefaultMQProducer producer;
public PayProducer() {
producer = new DefaultMQProducer(producerGroup);
// 指定nameServer地址,多個地址之間以 ; 隔開
producer.setNamesrvAddr(JmsConfig.NAME_SERVER);
start();
}
public DefaultMQProducer getProducer() {
return producer;
}
/**
* 對象在使用之前必須調用一次,並且只能初始化一次
*/
public void start() {
try {
this.producer.start();
} catch (MQClientException e) {
e.printStackTrace();
}
}
/**
* 一般在應用上下文,使用上下文監聽器,進行關閉
*/
public void shutdown() {
producer.shutdown();
}
}
4、消費者配置
@Component
public class PayConsumer {
private DefaultMQPushConsumer consumer;
private String consumerGroup = "pay_consumer_group";
public PayConsumer() throws MQClientException {
consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(JmsConfig.NAME_SERVER);
// 設置消費地點,從最後一個進行消費(其實就是消費策略)
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
// 訂閱主題的哪些標籤
consumer.subscribe(JmsConfig.TOPIC, "*");
// 註冊監聽器
consumer.registerMessageListener((MessageListenerConcurrently)
(msgs, context) -> {
try {
// 獲取Message
Message msg = msgs.get(0);
System.out.printf("%s Receive New Messages: %s %n",
Thread.currentThread().getName(), new String(msgs.get(0).getBody()));
String topic = msg.getTopic();
String body = new String(msg.getBody(), "utf-8");
// 標籤
String tags = msg.getTags();
String keys = msg.getKeys();
System.out.println("topic=" + topic + ", tags=" + tags + ",keys=" + keys + ", msg=" + body);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
});
consumer.start();
System.out.println("Consumer Listener");
}
}
5、模擬接口
@RestController
public class PayController {
@Autowired
private PayProducer payProducer;
@RequestMapping("/api/v1/pay_cb")
public Object callback(String text) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
// 創建消息 主題 二級分類 消息內容好的字節數組
Message message = new Message(JmsConfig.TOPIC, "taga", ("hello rocketMQ " + text).getBytes());
SendResult send = payProducer.getProducer().send(message);
System.out.println(send);
return new HashMap<>();
}
}