RocketMq 封装工具类

5 篇文章 0 订阅

application.yml

rocketmq:
  name-server: dev-mqsrv.icbf.plus:9876
  producer:
    group: customerbasic-group-test-huang
    #目的地(topic:tag)
    #topic
    topic: customerbasic-topic-test-huang
    #sync tag(同步消息tag)
    sync-tag: anran-sync-tags
    #async tag(异步消息tag)
    async-tag: anran-async-tags
    #oneway tag(单向消息tag)
    oneway-tag: anran-oneway-tags
#消费者配置
mq:
  consumer:
    group: customerbasic-group-test-huang
    #监听主题
    topic: customerbasic-topic-test-huang

RocketProducer 消息生产者(策略模式)

@Component
public class RocketProducer {
    @Resource
    private RocketMQTemplate rocketMQTemplate;

    @Value("${rocketmq.producer.topic}")
    private String topic;

    public SendStatus sendMessage(String tag, Object body) {
        String top = topic;
        String uuid = IdUtil.randomUUID();
        Message<Object> message = MessageBuilder.withPayload(body)
                .setHeader("KEYS", uuid)
                .setHeader("authUser",
                        BaseUserUtil.getAuthUserNoThrows() == null ? "" : JSON.toJSONString(BaseUserUtil.getAuthUserNoThrows())).build();
        SendResult sendResult = rocketMQTemplate.syncSend(top + ":" + tag, message);
        return sendResult.getSendStatus();
    }

    public SendStatus sendMessage(String topic, String tag, Object body) {
        String uuid = IdUtil.randomUUID();
        Message<Object> message = MessageBuilder.withPayload(body)
                .setHeader("KEYS", uuid)
                .setHeader("authUser",
                        BaseUserUtil.getAuthUserNoThrows() == null ? "" : JSON.toJSONString(BaseUserUtil.getAuthUserNoThrows())).build();
        SendResult sendResult = rocketMQTemplate.syncSend(topic + ":" + tag, message);
        return sendResult.getSendStatus();
    }

}

RocketConsumer 消费者

@Component
@Slf4j
@RocketMQMessageListener(
        consumerGroup = "${mq.consumer.group}",
        topic = "${mq.consumer.topic}")
public class RocketConsumer implements RocketMQListener<Message>, RocketMQPushConsumerLifecycleListener {
    @Override
    public void onMessage(Message message) {
        try {
            core(message);

            RocketConstants.CustomerBeanEnum enumByTar = RocketConstants.CustomerBeanEnum.getEnumByTar(message.getTags());
            log.info("消费者接受到消息,message:{},beanName:{},method:{}", JSON.toJSONString(new String(message.getBody())),enumByTar.getBean(),enumByTar.getMethod());
            //获取对应场景实现类
            ConsumerService consumerService = SpringUtil.getBean(enumByTar.getBean());
            //执行方法
            ReflectUtil.invoke(consumerService, enumByTar.getMethod(),message);
        } catch (Exception e) {
            log.error("处理消息失败后续可以加mysql表记录异常消息,message:{}",JSON.toJSONString(new String(message.getBody())),e);
        }
    }

    private void core(Message message) {
        String authUser = message.getUserProperty("authUser");
        if (StringUtils.isNotEmpty(authUser)) {
            AuthUserThreadLocal.setBaseAuthUser(JSON.parseObject(authUser, BaseAuthUser.class));
        }
    }

    @Override
    public void prepareStart(DefaultMQPushConsumer consumer) {
    }

消费公共类

public interface ConsumerService {

}

@Slf4j
@Service
public class OffQcImpl implements ConsumerService {
}

反射类

public class RocketConstants {

    /**
     * 消费实现类
     */
    public enum CustomerBeanEnum {
        /**
         * 刷新用户数据权限
         */
        CONSUMER_REFRESH_USER_PERMISSION_IMPL("REFRESH_USER_PERMISSION", "refreshUserPermissionServiceImpl", "trigger");
          @Getter
        private final String tag;
        @Getter
        private final String bean;

        @Getter
        private final String method;

        CustomerBeanEnum(String tar, String bean, String method) {
            this.tag = tar;
            this.bean = bean;
            this.method = method;
        }

        public static CustomerBeanEnum getEnumByTar(String tar) {
            for (CustomerBeanEnum statusEnum : CustomerBeanEnum.values()) {
                if (statusEnum.getTag().equals(tar)) {
                    return statusEnum;
                }
            }
            throw new IllegalArgumentException("bean is not found,没有找到的tag值为:" + tar);
        }
    }
}

调用

  /**
     * 发送RocketMQ消息
     *
     * @param tag
     * @param body
     */
    public Boolean sendRocketMsg(String tag, Object body) {
        try {
            SendStatus sendStatus = rocketProducer.sendMessage(tag, body);
            if (sendStatus == SendStatus.SEND_OK) {
                return true;
            } else {
                log.error("任务消息发送失败,Rocket异常信息{}", JSONUtil.toJsonStr(sendStatus));
            }
        } catch (Exception e) {
            log.error("任务消息发送失败,异常信息{}", e);
        }
        return false;
    }
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
对于Spring Boot与RocketMQ工具类,可以使用阿里云提供的RocketMQ Spring Boot Starter。该工具类提供了一套封装RocketMQ的Spring Boot自动配置和注解,简化了使用RocketMQ的开发过程。 您可以通过以下步骤来使用RocketMQ Spring Boot Starter: 1. 在您的Spring Boot项目中添加以下依赖: ```xml <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 创建一个配置类来配置RocketMQ的参数,例如: ```java @Configuration public class RocketMQConfig { @Value("${rocketmq.name-server}") private String nameServer; @Value("${rocketmq.access-key}") private String accessKey; @Value("${rocketmq.secret-key}") private String secretKey; // Getter and Setter @Bean public RocketMQTemplate rocketMQTemplate() { RocketMQTemplate rocketMQTemplate = new RocketMQTemplate(); rocketMQTemplate.setProducerGroup("your-producer-group"); rocketMQTemplate.setNameServer(nameServer); rocketMQTemplate.setAccessKey(accessKey); rocketMQTemplate.setSecretKey(secretKey); return rocketMQTemplate; } } ``` 3. 然后,您可以在您的代码中使用@Autowired注解来注入RocketMQTemplate,并使用它来发送和接收消息。例如: ```java @Autowired private RocketMQTemplate rocketMQTemplate; public void sendMessage() { rocketMQTemplate.convertAndSend("your-topic", "your-message"); } @RocketMQMessageListener(topic = "your-topic", consumerGroup = "your-consumer-group") public class MyRocketMQListener implements RocketMQListener<String> { @Override public void onMessage(String message) { // 处理接收到的消息 } } ``` 以上就是使用RocketMQ Spring Boot Starter的基本步骤。您可以根据您的需求进一步定制和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员黄小青

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值