spring-cloud-alibaba整合rocketMQ

本文介绍了如何在Spring Boot应用中集成Apache RocketMQ,包括添加依赖、配置生产者和消费者组,以及编写示例代码。重点讲解了生产者和消费者之间的依赖设置,以及如何在配置文件和注解中指定相关参数。


生产者与消费者 加依赖

根据自己的MQ版本来指定版本号

<dependency>
  <groupId>org.apache.rocketmq</groupId>
   <artifactId>rocketmq-spring-boot-starter</artifactId>
   <version>2.0.3</version>
</dependency>

生产者

2.加配置

rocketmq:
  name-server:  localhost:9876
  producer:
    group: test-group

3.编写生产者

private final RocketMQTemplate rocketMQTemplate;


//convertAndSend(topic,发送的数据);
rocketMQTemplate.convertAndSend("add_bouns", UserAddBonusMsgDTO.builder().userId(share.getUserId()).bonus(50).build());
     

消费者

4.加配置

rocketmq:
  name-server: localhost:9876

5.编写消费者


import com.itmuch.usercenter.dao.user.BonusEventLogMapper;
import com.itmuch.usercenter.dao.user.UserMapper;
import com.itmuch.usercenter.domain.entity.dto.massaging.UserAddBonusMsgDTO;
import com.itmuch.usercenter.domain.entity.user.BonusEventLog;
import com.itmuch.usercenter.domain.entity.user.User;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

@Slf4j
@RocketMQMessageListener(consumerGroup = "consumer-group",topic = "add_bouns")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Service
public class AddBonusListener implements RocketMQListener<UserAddBonusMsgDTO> {

    private final UserMapper userMapper;
    private final BonusEventLogMapper  bonusEventLogMapper;
    @Override
    public void onMessage(UserAddBonusMsgDTO userAddBonusMsgDTO) {
		//业务逻辑
        User user = userMapper.selectByPrimaryKey(userAddBonusMsgDTO.getUserId());
        user.setBonus(user.getBonus()+userAddBonusMsgDTO.getBonus());
        userMapper.updateByPrimaryKey(user);
        bonusEventLogMapper.insert(BonusEventLog.builder().userId(user.getId()).event("UPDATE").createTime(new Date()).description("加积分").value(userAddBonusMsgDTO.getBonus()).build());

    }
}

注意

生产者的group写在配置文件
消费者的group写在注解里

<think>好的,用户想了解在2023年如何将Spring Cloud Stream与RocketMQ进行整合的最佳实践。首先,我需要回忆一下Spring Cloud Stream的基本概念和RocketMQ集成方式。Spring Cloud Stream是一个用于构建消息驱动微服务的框架,它通过绑定器抽象与不同的消息中间件交互。而RocketMQ是阿里巴巴开源的分布式消息系统,现在属于Apache项目,适合处理高吞吐量的场景。 接下来,我需要确认最新的Spring Cloud Stream版本是否支持RocketMQ。可能用户已经知道,Spring Cloud Alibaba项目提供了对RocketMQ的绑定器,所以需要检查当前版本的兼容性。2023年可能使用的是Spring Cloud 2022.x或者更高版本,对应的Spring Cloud Alibaba版本应该是2022.x.x-RC2或者其他稳定版本。需要确保版本兼容,否则会出现依赖冲突。 然后,考虑整合步骤。通常需要添加依赖、配置连接信息、定义消息通道、编写生产者和消费者代码。可能还需要配置RocketMQ的NameServer地址,以及生产者和消费者的组信息。另外,事务消息、顺序消息、延迟消息等高级特性是否支持,需要参考文档说明。 最佳实践可能包括使用函数式编程模型,因为Spring Cloud Stream从3.x版本开始推荐使用函数式,取代了旧的注解方式。还有配置管理,比如如何设置消息的序列化方式、重试机制、错误处理等。此外,监控和追踪也是重要的部分,比如整合Sleuth和Prometheus,确保消息的可观测性。 另外,用户可能关心性能优化,比如批量发送消息,消费者并发配置,以及如何保证消息的可靠传输,比如ACK机制和事务支持。还有可能涉及到与Spring Boot的自动配置,如何自定义绑定器的高级配置。 需要提醒用户注意版本兼容性,比如Spring Cloud Alibaba的版本与Spring BootSpring Cloud版本的对应关系,避免出现不兼容的问题。此外,在部署时可能需要考虑RocketMQ集群的配置,NameServer的高可用,以及生产环境中的安全设置,比如ACL权限控制。 最后,可能还需要提供一些示例代码,比如如何定义Supplier和Consumer函数,如何测试消息的发送和接收,以及如何处理异常情况。如果有官方文档或者社区推荐的实践,应该引用这些资源,确保信息的准确性。</think>### Spring Cloud Stream与RocketMQ整合最佳实践(2023) #### 1. **依赖配置** 在`pom.xml`中添加最新版本的Spring Cloud Stream和RocketMQ Binder依赖(以2023年主流版本为例): ```xml <!-- Spring Cloud Stream --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream</artifactId> <version>4.0.3</version> </dependency> <!-- RocketMQ Binder --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-stream-rocketmq</artifactId> <version>2022.0.0.0-RC2</version> </dependency> ``` 需注意Spring Cloud Alibaba版本与Spring Boot版本的兼容性[^1]。 --- #### 2. **配置文件** 在`application.yml`中配置RocketMQ连接信息: ```yaml spring: cloud: stream: bindings: output: # 生产者通道 destination: test-topic content-type: application/json input: # 消费者通道 destination: test-topic group: consumer-group content-type: application/json rocketmq: binder: name-server: 127.0.0.1:9876 # RocketMQ NameServer地址 group: producer-group ``` 支持动态配置扩展(如从Nacos读取配置)[^1]。 --- #### 3. **函数式编程模型** 使用**Supplier/Function/Consumer**定义消息通道(推荐方式): ```java // 生产者 @Bean public Supplier<Message<String>> source() { return () -> MessageBuilder.withPayload("Hello RocketMQ").build(); } // 消费者 @Bean public Consumer<Message<String>> sink() { return message -> { System.out.println("Received: " + message.getPayload()); }; } ``` 函数式模型简化了注解配置,提升代码可维护性。 --- #### 4. **高级特性实现** - **事务消息**: ```java @Bean public RocketMQTemplate rocketMQTemplate() { return new RocketMQTemplate(transactionListener); } ``` - **顺序消息**: ```yaml spring.cloud.stream.rocketmq.bindings.output.producer.message-orderly: true ``` - **延迟消息**: ```java MessageBuilder.withPayload("Delayed Message") .setHeader(RocketMQHeaders.DELAY, 3) # 延迟级别(1=1s, 2=5s...) .build(); ``` --- #### 5. **监控与追踪** 集成Spring Cloud Sleuth实现分布式追踪: ```yaml spring: sleuth: rocketmq: enabled: true cloud: stream: rocketmq: binder: customized-trace-topic: sleuth-trace-topic ``` 通过Prometheus暴露指标: ```java @Bean public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() { return registry -> registry.config().commonTags("application", "stream-app"); } ``` --- #### 6. **部署优化建议** 1. **批量处理**: ```yaml spring.cloud.stream.rocketmq.bindings.output.producer.batch-enabled: true ``` 2. **消费者并发控制**: ```yaml spring.cloud.stream.bindings.input.consumer.concurrency: 4 ``` 3. **ACL安全控制**: ```yaml spring.cloud.stream.rocketmq.binder.access-key: your-key spring.cloud.stream.rocketmq.binder.secret-key: your-secret ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值