1,消费者代码:
package com.ryfchina.ipay.regionalpay.mq;
import com.ryfchina.ipay.regionalpay.vo.MqMessageVO;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.concurrent.TimeUnit;
/**
* 发送消息队列服务
*
*/
@Service("mqProducer")
public class MqProducer {
private static final Logger LOGGER = LoggerFactory.getLogger(MqProducer.class);
@Value("${rocketmq.url}")
private String namesrvAddr;
@Value("${rocketmq.producer.group}")
private String producerGroup;
@Value("${rocketmq.producer.instance}")
private String producerInstance;
private DefaultMQProducer producer;
@Autowired
private RedissonClient redissonClient;
@PostConstruct
public void start() throws Exception {
LOGGER.info("初始化生产者开始……");
producer = new DefaultMQProducer();
producer.setNamesrvAddr(namesrvAddr);
producer.setProducerGroup(producerGroup);
producer.setInstanceName(producerInstance);
// 发送报文最大6M
producer.setMaxMessageSize(6 * 1024 * 1024);
producer.start();
LOGGER.info("初始化生产者完成");
}
@PreDestroy
public void destroy() {
LOGGER.info("关闭rocketmq-producer连接。");
try {
producer.shutdown();
} catch (Exception e) {
LOGGER.error("关闭rocketmq-producer异常。", e);
}
}
/**
* 发送消息
*
* @param tag 消息标识
* @param body 消息内容
*/
public void send(String topic, String tag, String key, String body) {
try {
Message msg = new Message(topic, tag, key, body.getBytes("utf-8"));
/*RMap<String, MqMessageVO> rMap = redissonClient.getMap("RM:MESSAGE");
rMap.put(key, new MqMessageVO(msg));*/
RBucket<Object> bucket = redissonClient.getBucket("RM:MESSAGE:" + key);
bucket.set(new MqMessageVO(msg), 1, TimeUnit.DAYS);
SendResult result = producer.send(msg);
if (!SendStatus.SEND_OK.equals(result.getSendStatus())) {
LOGGER.error("消息推送失败,topic : {}, tag : {}, key : {}, body : {}", topic, t