springboot整合activeMQ

25 篇文章 0 订阅
3 篇文章 0 订阅
windows下 部署
1.activeMQ依赖于JDK,
2.解压/安装activeMQ的包,进入如下目录

3.activemq.bat双击启动脚本

如图表示启动成功,ActiveMQ默认启动到8161端口,启动完了后在浏览器地址栏输入:http://localhost:8161/admin要求输入用户名密码,默认用户名密码为admin、admin,这个用户名密码是在conf/users.properties中配置的。输入用户名密码后便可看到如下图的ActiveMQ控制台界面了


ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

特性

  • 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  • 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
  • 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
  • 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
  • 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  • 支持通过JDBC和journal提供高速的消息持久化
  • 从设计上保证了高性能的集群,客户端-服务器,点对点
  • 支持Ajax
  • 支持与Axis的整合
  • 可以很容易的调用内嵌JMS provider,进行测试
更多关于 ActiveMQ 的内容可以 点击这里

springboot整合activeMQ
1.添加maven依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
	<dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-jms</artifactId>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.activemq</groupId>  
            <artifactId>activemq-client</artifactId>  
        </dependency> 
没有直接使用注释的依赖,是因为其含有如下依赖
<dependency>  
    <groupId>org.apache.activemq</groupId>  
    <artifactId>activemq-broker</artifactId>  
</dependency>
而它的作用是什么呢,会在程序中直接内嵌 ActivityMQ,也就是说不需要安装 ActiveMQ,但是这个如果服务宕机了,内嵌的 ActiveMQ 也就没了。关键,这个内嵌的 ActiveMQ 而无法看到图形化界面,所以这里没有直接使用注释里的依赖。
2.在application.properties中增加如下配置
## URL of the ActiveMQ broker. Auto-generated by default. For instance `tcp://localhost:61616`
# failover:(tcp://localhost:61616,tcp://localhost:61617)
# tcp://localhost:61616
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.in-memory=true
spring.activemq.pool.enabled=false
 ActiveMQ 的端口做一个简短说明,61616为消息代理接口 ,8161 为管理界面
定义JMS
package com.fcc.common.config;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.core.JmsMessagingTemplate;

import javax.jms.ConnectionFactory;

/**
 * @Author:FeiCongcong
 * @Date:2017/8/7 0007 14:46
 */
@Configuration
public class JmsMessagingTemplateConfig {

    @Value("${spring.activemq.broker-url}")
    private String broker_url;

    @Value("${spring.activemq.in-memory}")
    private String in_memory;

    @Value("${spring.activemq.pool.enabled}")
    private String pool_enabled;

    @Bean("jmsMessagingTemplate")//注册bean给spring容器管理,
    public JmsMessagingTemplate jmsMessagingTemplate(){
        JmsMessagingTemplate jmsMessagingTemplate=new JmsMessagingTemplate();
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(broker_url);
        jmsMessagingTemplate.setConnectionFactory(connectionFactory);

        return jmsMessagingTemplate;
    }
}
消息生产者
package com.fcc.common.component;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;

import javax.jms.Destination;

/**
 * @Author:FeiCongcong
 * @Date:2017/8/7 0007 10:17
 */
@Component
public class MqProducerComponent {
    @Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装
    private JmsMessagingTemplate jmsTemplate;
    // 发送消息,destination是发送到的队列,message是待发送的消息
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
    }
}
消息消费者
package com.fcc.common.component;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
/**
 * @Author:FeiCongcong
 * @Date:2017/8/7 0007 10:19
 */
@Component
public class MqCosumerComponent {
    // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
    @JmsListener(destination = "mytest.queue")
    @SendTo("out.queue")
    public void receiveQueue(String text) {
        System.out.println("Consumer收到的报文为:"+text);
    }
}
测试类:
package com.fcc.web.controller;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.fcc.common.component.MqProducerComponent;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.jms.Destination;

/**
 * @Author:FeiCongcong
 * @Date:2017/8/7 0007 11:07
 */
@Controller
@RequestMapping("MQ")
public class MqController {
    @Autowired
    private MqProducerComponent mqProducerComponent;

    @RequestMapping("test")
    @ResponseBody
     public String mqTest(){
          Destination destination = new ActiveMQQueue("mytest.queue");
          for (int i = 0; i < 10; i++) {
            mqProducerComponent.sendMessage(destination, "myname is fcc!!!");
          }
          return null;
     }
}
启动类加注解 @EnableJms
@RestController
@EnableAutoConfiguration//启用自动配置
@ComponentScan(basePackages="com.fcc")//组件扫描
@EnableJms
public class MainWeb {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(MainWeb.class, args);
    }
}
测试:浏览器请求 http://localhost:8092/MQ/test
控制台输出
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
Consumer收到的报文为:myname is fcc!!!
打开 ActiveMQ 的管理页面,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值