开发过程中使用RocketMq的过程及遇到的问题

本文记录了在项目开发中使用RocketMQ的过程,包括生产者与消费者的实现细节。生产者通过rocketMqTemplate.convertAndSend方法发送消息,消费者则可选择推模式或拉模式,如使用DefaultMQPushConsumer进行集群消费。文章对比了两种消费模式的特性,强调了资源消耗和功能支持的差异。
摘要由CSDN通过智能技术生成

最近开发的业务有使用到rocketMq技术,整体过程及拓展知识记录一下以便学习。

项目流程

在项目中使用的话,大概是分为两层,一层为调用层也可以认为生产者,还有一层为执行层可以为消费者。因为我们的消费者是部署在多台服务器上。所以为了并发消费,提高消费效率,就使用rocketMq向各消费者发送需要消费的消息。每台消费者收到消息去执行自己的一部分业务。

上学习代码(简略代码)

生产者:

@Autowired
RocketMQTemplate rocketMQTemplate;


public void send(){
   
	//...省略  在数据库为未执行的业务添加未执行状态0

	rocketMQTemplate.covertAndSend("tipic:tag",参数体)
}


rocketMQTemplate是用于发送消息到RocketMQ的模板类。convertAndSend方法用于将消息对象进行转换,并发送到指定的RocketMQ主题(Topic)中。

注意 在这里第一个参数可以只写主题Topic,或者是主题:tag,只写主体的话,消费者只需要订阅相应的Topic就可以,如果带Tag,那么消费者也需要对应上相应的Tag才能获取到消息。

rocketMqTemplate.convertAndSend中的参数

destination:目标消息主题或者队列的名称。
payload:要发送的消息内容,可以是任意 Java 对象,RocketMqTemplate 会自动将其序列化为消息内容。
messagePostProcessor:消息后处理器,可以对消息进行进一步的处理操作,例如设置消息属性、延迟发送等。
sendCallback:发送消息的回调接口,用于异步发送消息后的处理。
timeout:发送消息的超时时间,单位为毫秒。
delayLevel:消息的延迟级别,用于设置消息的延迟发送时间。
mqMessageConverter:消息转换器,用于将 Java 对象转换为 RocketMQ 的 Message 对象。

示例:

rocketMqTemplate.convertAndSend("myTopic", "Hello, RocketMQ!", message -> {
   
    // 设置消息属性
    message.putUserProperty("key", "value");
    return message;
}, new SendCallback() {
   
    @Override
    public void onSuccess(SendResult sendResult) {
   
        System.out.println("消息发送成功:" + sendResult);
    }

    @Override
    public void onException(Throwable e) {
   
        System.err.println("消息发送失败:" + e.getMessage());
    }
}, 3000, 3<
  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java使用RocketMQ需要以下步骤: 1. 下载RocketMQ:从官网下载RocketMQ的二进制包并解压。 2. 启动NameServer和Broker:进入解压后的目录,分别执行namesrv和broker命令来启动NameServer和Broker。 3. 引入RocketMQ客户端依赖:在Java项目的pom.xml文件添加以下依赖: ``` <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.8.0</version> </dependency> ``` 4. 编写Producer和Consumer代码:使用RocketMQ的Java客户端API编写Producer和Consumer的代码,示例代码如下: Producer代码: ``` import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message; public class RocketMQProducer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("producer_group"); producer.setNamesrvAddr("localhost:9876"); producer.start(); Message message = new Message("topic_name", "tag_name", "Hello RocketMQ".getBytes()); producer.send(message); producer.shutdown(); } } ``` Consumer代码: ``` import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.common.consumer.ConsumeFromWhere; import org.apache.rocketmq.common.message.MessageExt; public class RocketMQConsumer { public static void main(String[] args) throws Exception { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group"); consumer.setNamesrvAddr("localhost:9876"); consumer.subscribe("topic_name", "*"); consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> { for (MessageExt msg : msgs) { System.out.println(new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }); consumer.start(); } } ``` 5. 运行Producer和Consumer代码:运行Producer和Consumer代码,可以在控制台看到消息的发送和消费情况。 以上就是在Java使用RocketMQ的基本步骤和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值