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!!!
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 的管理页面,