如何快速的使用RocketMq

开始前需要简单了解一下,RocketMq的原理,参看之前的一篇文章 rokcetmq

在正式开发中。我们主要关注两个方面,发送者和接收者。

发送者

我们创建一个 DefaultMQProducer
的Bean,在Bean中设置mq的nameserver,账号密码等(配置可以存储的disconf中)。在需要使用的地方注入bean,使用其send方法,传入要发送的数据即可。

@Bean(name = "rocketMqProducer")
    public DefaultMQProducer defaultMqProducer() throws MQClientException {
        String accessKey = xxx;
        String secretKey = xxx;
        DefaultMQProducer producer;
        if (StringUtils.isNotEmpty(accessKey) && StringUtils.isNotEmpty(secretKey)) {
            producer = new DefaultMQProducer(producerGroup,
                    new AclClientRPCHook(new SessionCredentials(accessKey, secretKey)));
            producer.setAccessChannel(AccessChannel.CLOUD);
        } else {
            producer = new DefaultMQProducer(producerGroup);
            producer.setAccessChannel(AccessChannel.LOCAL);
        }
        producer.setNamesrvAddr(namesrvAddr");
        producer.setSendMsgTimeout(rocketmq.send.time.out");			 
        producer.start();
        return producer;
    }
@Autowired
private DefaultMQProducer rocketMqProducer;
message = new Message(topicName, tagName, content.getBytes(RemotingHelper.DEFAULT_CHARSET));
rocketMqProducer.send(message)

接收者

接收者是如何知道发送方发来了数据呢?就需要在接收者这里设置一个监听器,在监听器里来处理数据。去创建一个DefaultMQPushConsumer的Bean,在Bean种设置nameserver,监听器,topic,tag等,调用start方法就启动了。

@Component
public class CosumerListener implements MessageListenerConcurrently {
    @Override
    public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgList, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
        try {
            for (MessageExt message : msgList) {
                String body=message.getBody();
            }
        } catch (Exception e) {
            return ConsumeConcurrentlyStatus.RECONSUME_LATER;
        }
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    }
}
@Autowired
private CosumerListener cosumerListener;

private DefaultMQPushConsumer registerCommon(String cosumerGroupId, MessageModel messageModel, String topic, String tag) throws MQClientException {
        String accessKey = xxxx;
        String secretKey = xxxx;
        DefaultMQPushConsumer consumer;
        if (StringUtils.isNotEmpty(accessKey) && StringUtils.isNotEmpty(secretKey)) {
            RPCHook rpcHook = new AclClientRPCHook(new SessionCredentials(accessKey, secretKey));
            consumer = new DefaultMQPushConsumer(cosumerGroupId, rpcHook, new AllocateMessageQueueAveragely(), true, null);
            // 自建服务=AccessChannel.LOCAL,云MQ=AccessChannel.CLOUD)
            consumer.setAccessChannel(AccessChannel.CLOUD);
        } else {
            consumer = new DefaultMQPushConsumer(cosumerGroupId, true);
            // 自建服务=AccessChannel.LOCAL,云MQ=AccessChannel.CLOUD)
            consumer.setAccessChannel(AccessChannel.LOCAL);
        }
        consumer.setInstanceName(cosumerGroupId);
        consumer.setNamesrvAddr(namesrvAddr);
        consumer.setMessageModel(messageModel);
        consumer.subscribe(topic, tag);

        return consumer;
}

 @Bean
public DefaultMQPushConsumer myConsumer() throws MQClientException {
        DefaultMQPushConsumer consumer = registerCommon(groudId,messageModel.topic,tag);
        consumer.registerMessageListener(cosumerListener);
        consumer.start();
        return consumer;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值