美文网首页
基于rocketmq-spring整合RocketMQ和Spri

基于rocketmq-spring整合RocketMQ和Spri

作者: 海涛_meteor | 来源:发表于2019-06-14 19:18 被阅读0次

    前言

    之前写过一篇RocketMQ整合Springboot的文章,但那种方式还需要自己上传jar包,较为麻烦。最近偶然的机会发现github上的rocketmq-externals工程结构变了,找不到rocketmq-spring-boot-starter目录了,一番搜索之后发现apache下面多了个rocketmq-spring项目(https://github.com/apache/rocketmq-spring),项目描述为——帮助开发者在Spring Boot中快速集成RocketMQ,那么很有必要来用一下官方产品了。

    依赖及配置

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

    这里的2.0.3是截止目前为止的最新版本,该版本依赖了spring-boot的2.0.5.RELEASE版本,因此请先保证自己的spring-boot版本。另外,该版本依赖rocketmq-client的4.5.1版本,该rocketmq版本已经支持ACL功能,因此为了安全考虑这个功能理所当然要开起来,具体配置如下:

    rocketmq:
      name-server: 127.0.0.1:9876;127.0.0.2:9876
      producer:
        group: xht-group
        access-key: rocketmq
        secret-key: 12345678
    

    合理主要是对生产者的信息进行配置,并不包含消费者的部分。

    生产者端

    import lombok.extern.slf4j.Slf4j;
    import org.apache.rocketmq.spring.core.RocketMQTemplate;
    import org.springframework.messaging.Message;
    import org.springframework.messaging.support.GenericMessage;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import javax.annotation.Resource;
    
    @Slf4j
    @RestController
    public class ScheduledMessageProducer {
    
        @Resource
        private RocketMQTemplate rocketMQTemplate;
    
    
        @RequestMapping(value = "send")
        public String send(String msg, int level){
            //普通消息发送
            rocketMQTemplate.convertAndSend("delay-message-test", msg);
            Message<String> message = new GenericMessage<>(msg);
            //延时消息发送,level对应的默认延时时间依次为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
            rocketMQTemplate.syncSend("delay-message-test",message,1000, level);
            log.info("消息已发送:{}",msg);
            return "success";
        }
    
    }
    

    消息的发送主要通过RocketMQTemplate进行,该对象提供了非常多已经封装好的基础方法供调用,这里只以普通消息发送,和同步延时消息的发送做为例子。

    消费者端

    import lombok.extern.slf4j.Slf4j;
    import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
    import org.apache.rocketmq.spring.core.RocketMQListener;
    import org.springframework.stereotype.Component;
    
    @Slf4j
    @Component
    @RocketMQMessageListener(topic = "delay-message-test", consumerGroup = "xht-group", accessKey = "rocketmq", secretKey = "12345678")
    public class ScheduledMessageConsumer implements RocketMQListener<String> {
    
        @Override
        public void onMessage(String message) {
            log.info("received message: {}", message);
        }
    }
    

    消费者端的实现非常简单,配置参数都集中于@RocketMQMessageListener注解上。

    总结

    对比我大半年前的文章可以看出,目前rocketmq与springboot的集成越来越容易了,说明rocketmq这个产品还是有很好前景的,之前处于各种原因考虑没有在生产环境使用,这下真的可以用起来了。

    相关文章

      网友评论

          本文标题:基于rocketmq-spring整合RocketMQ和Spri

          本文链接:https://www.haomeiwen.com/subject/rqcmfctx.html