Springboot整合ActiveMQ实现消息队列的过程浅析

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Springboot整合ActiveMQ实现消息队列的过程浅析

零维展开智子   2023-03-20 我要评论

确保你启动了自己电脑的activemq。

pom中导入坐标

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>

书写yml配置

spring:
  activemq:
    broker-url: tcp://localhost:61616
  jms:
    template:
      default-destination: my    #消息队列的默认名字
    pub-sub-domain: false   #是否开启消息订阅模式

业务层代码

@Service
public class MessageServiceActive implements MessageService {
    @Autowired
    private JmsMessagingTemplate template;
    @Override
    public void getMessage(String id) {
        template.convertAndSend("AA",id);        //自定义消息队列名字
        System.out.println("待发送短信的订单已纳入处理队列,id:"+id);
    }
    @Override
    public String doMessage() {
        String id=template.receiveAndConvert("AA",String.class);
        return id;
    }

此时,你书写控制层代码就可以实现消息队列了,不过有一个缺陷,那就是处理消息的时候必须手动书写网址,调用执行对应的方法才可以,不过我们可以通过监听器来实现自动化,就是一旦有消息产生就会立即处理。

监听器代码

@Component
public class MessageListener {
    @Autowired
    private JmsMessagingTemplate template;
    @JmsListener(destination = "AA")    //要监听的消息队列名称
    @SendTo(value = "BB")        //自动化处理完,还可以把该消息传递给下一了消息队列        
    public String receive(){
        String id=template.receiveAndConvert("AA",String.class);
        System.out.println("已完成短信发送业务,id:"+id+"\n");
        return "new_"+id;       //利用返回值转发给下一个
    }
}

业务层代码

@Service
public class MessageServiceActive implements MessageService {
    @Autowired
    private JmsMessagingTemplate template;
    @Override
    public void getMessage(String id) {
        template.convertAndSend("AA",id);
        System.out.println("待发送短信的订单已纳入处理队列,id:"+id);
    }
}

这样我们的消息就可以流水线似的处理了,这是点对点的消息队列方式,还有订阅式的。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们