rocketMQ:
生产者:
@Autowired
RocketMQTemplate rocketMQTemplate;
@Autowired
private MqConfig mqConfig;
将需要添加到消息队列的属性添加进去:
Map<String, Object> map = new HashMap<String, Object>(3) {{
put(" ", dataRealtime.getIotId());
put(" ", dataRealtime.getDataTime().getTime());
put(" ", Float.parseFloat(dataRealtime.getDataValue()));
}};
SendResult send = rocketMQTemplate.syncSend(mqConfig.getStandardCheckTopic(),map);
if (!send.getSendStatus().equals(SendStatus.SEND_OK)) {
logger.error("发送至检查队列失败>>" + JsonMapper.toJsonString(map));
}
需要配置的config:其中包括消费时候的topic:
@ConfigurationProperties("q")
@Component
public class MqConfig {
/**对接物联网SCADA数据*/
private String rocketmqIp;
private String producerGroup = " ";
private String standardCheckTopic = " ";
消费者:
config
@ConfigurationProperties("q")
@Component
@Setter
@Getter
public class MqConfig {
/**
* 消息队列类型,支持rabbitmq,rocketmq
*/
private String type;
private Rabbit rabbit;
private Rocket rocket;
private String comsumerGroup = "";
private String standardCheckTopic = "";
消费者的实现:
@Slf4j
@Component
public class StandardCheckConsumer implements InitializingBean, DisposableBean {
private DefaultMQPushConsumer consumer;
@Autowired
private MqConfig mqConfig;
@Autowired
private RocketMQProperties rocketMQProperties;
@Autowired
private StandardCheckFactory standardCheckFactory;
@Override
public void afterPropertiesSet() throws Exception {
consumer = new DefaultMQPushConsumer(mqConfig.getComsumerGroup());
consumer.setNamesrvAddr(rocketMQProperties.getNameServer());
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.subscribe(mqConfig.getStandardCheckTopic(), "*");
consumer.registerMessageListener((MessageListenerOrderly) (msgs, context) -> {
for (MessageExt messageExt : msgs) {
byte[] body = messageExt.getBody();
String json = new String(body, StandardCharsets.UTF_8);
Map<String, Object> dataMap = (Map<String, Object>) JsonMapper.fromJsonString(json, Map.class);
try {
standardCheckFactory.check(dataMap);
} catch (Exception e) {
log.error(json + ">>" + e.getMessage(), e);
}
}
DefaultMQ
生产者:
@Autowired
RocketMqConfig rocketMqConfig;
@Autowired
DefaultMQProducer receiveMessageProducer;
Map<String,Object> msgBodyMap = new HashMap<>(8, 1);
msgBodyMap.put("userId", userId);
msgBodyMap.put("areaId", areaId);
msgBodyMap.put("messageName", receiveDTO.getMessageName());
msgBodyMap.put("messageContent", receiveDTO.getMessageContent());
msgBodyMap.put("ruleId", receiveDTO.getRuleId());
ObjectMapper mapper = new ObjectMapper();
String msgBody = mapper.writeValueAsString(msgBodyMap);
/* ** 保存消息到rocketMq */
Message message = new Message();
//使用【消息批次号】作为【消息Key】, 用来处理重复消费。
message.setKeys(batchNo + "");
message.setTopic(rocketMqConfig.getReceiveMessageConfig().getTopic());
message.setTags(rocketMqConfig.getReceiveMessageConfig().getReceiveMessageTag());
message.setBody(msgBody.getBytes());
receiveMessageProducer.send(message);
消费者消费:
@Service
public class ReceiveMessageConsumer {
private Logger logger = LoggerFactory.getLogger(ReceiveMessageConsumer.class);
@Autowired
WarningReceiveMessageService warningReceiveMessageService;
@Autowired
RocketMqConfig rocketMqConfig;
private DefaultMQPushConsumer consumer;
@PostConstruct
public void init(){
try {
String tags = String.format("%s", rocketMqConfig.getReceiveMessageConfig().getReceiveMessageTag());
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(rocketMqConfig.getReceiveMessageConfig().getConsumerGroupName());
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.setNamesrvAddr(rocketMqConfig.getConfig().getNamesrvAddr());
consumer.setInstanceName("SMART_WARNING_RECEIVE_MESSAGE_CONSUMER");
consumer.subscribe(rocketMqConfig.getReceiveMessageConfig().getTopic(), tags);
consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
for (MessageExt msg : msgs) {
String msgBody = null;
try {
msgBody = new String(msg.getBody(), "utf-8");
warningReceiveMessageService.consumerWarningMessage(msgBody, msg.getKeys());
} catch (Exception e) {
logger.error("异步处理【消息接收】失败 msgBody=" + msgBody, e);
}
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
来源:CSDN
作者:成长小草
链接:https://blog.csdn.net/qq_41434746/article/details/103463361