前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot与activeMQ入门(1)

springboot与activeMQ入门(1)

作者头像
用户2038589
发布2018-09-06 15:39:08
4850
发布2018-09-06 15:39:08
举报
文章被收录于专栏:青青天空树青青天空树

下一篇,springboot与activeMQ入门(2:主从备份,负载均衡)

说明:acitveMQ版本为:5.9.1,springboot版本为2.0.3

一. 下载安装(windows)

  官方下载地址:点我跳转,选择windows安装包下载,然后解压,解压后运行bin目录下的activemq.bat启动服务,无报错即可启动成功。默认管理地址为:localhost:8161/admin,默认管理员账号密码为admin/admin

二. springboot整合

 1. 创建springboot项目

  创建springboot web项目,加入spring-boot-starter-activemq依赖。

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

  然后编辑配合文件,加上一个配置:61616为activeMQ的默认端口,暂时不做其他配置,使用默认值。

代码语言:javascript
复制
spring:
  activemq:
    broker-url: tcp://localhost:61616

 2. 创建生产者消费者

  springboot中activeMQ的默认配置为生产-消费者模式,还有一种模式为发布-订阅模式后面再讲。项目目录如下:

  首先编写配置类Config.java,代码如下

代码语言:javascript
复制
@Configuration
public class Config {
    @Bean(name = "queue2")
    public Queue queue2(){
        return new ActiveMQQueue("active.queue2");
    }

    @Bean(name = "queue1")
    public Queue queue1(){
        return new ActiveMQQueue("active.queue1");
    }
}

上面的代码建立了两个消息队列queue1,queue2,分别由queue1和queue2这两个Bean注入到Spring容器中。程序运行后会在activeMQ的管理页面->queue中看到如下:

  生产者Producer.java代码如下:

代码语言:javascript
复制
@RestController
public class Producer {
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;
    @Autowired()
    @Qualifier("queue2")
    private Queue queue2;
    @Autowired()
    @Qualifier("queue1")
    private Queue queue1;

    @GetMapping("/queue2")
    public void sendMessage1(String message){
            jmsMessagingTemplate.convertAndSend(queue2,"I'm from queue2:"+message);
    }

    @GetMapping("/queue1")
    public void sendMessage2(String message){
        jmsMessagingTemplate.convertAndSend(queue1,"I'm from queue1:"+message);
    }
}

上面的类创建了两个GET接口,访问这两个接口分别向queue1和queue2中发送消息。

消费者Comsumer.java代码如下:

代码语言:javascript
复制
@Component //将该类注解到Spring 容器中
public class Comsumer {
    //接受消息队列1消息
    @JmsListener(destination = "active.queue1") //监听active.queue1消息队列
    public void readActiveQueue11(String message){
        System.out.println(1+message);
    }

    //接受消息队列1消息
    @JmsListener(destination = "active.queue1")
    public void readActiveQueue12(String message){
        System.out.println(2+message);
    }

    //接受消息队列2消息
    @JmsListener(destination = "active.queue2")
    public void readActiveQueue21(String message){
        System.out.println(1+message);
    }

    //接受消息队列2消息
    @JmsListener(destination = "active.queue2")
    public void readActiveQueue22(String message){
        System.out.println(2+message);
    }
}

上面的代码定义了4个消费者,每两个消费一个消息队列。

 3. 运行

  启动项目后分别向/queue1?message=niihao,/queue2?message=nihaoa发送http请求,然后我们可以在控制台中看到如下输出:

代码语言:javascript
复制
2I'm from queue2:nihaoa
1I'm from queue2:nihaoa
2I'm from queue1:nihao
1I'm from queue1:nihao

消息都成功被消费者消费,从打印结果也可看出生产者消费者的一个特点:一个消息只会被一个消费者消费。同时在管理页面中可以看到:

每个消息队列有两个消费者,队列进入了三个消息,出了三个消息,说明消息都被消费掉了,如果注释掉消费者代码,再次运行,然后发送消息就会发现MessagesEnqueued数量大于MessagesDequeued,然后再让消费者上线会立即消费掉队列中的消息。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一. 下载安装(windows)
  • 二. springboot整合
    •  1. 创建springboot项目
      •  2. 创建生产者消费者
      •  3. 运行
      相关产品与服务
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档