rocketMQ、DefaultMQ自己的笔记

≡放荡痞女 提交于 2019-12-16 03:12:29

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;
            });

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!