一、部署和启动ActiveMQ

去官网下载:http://activemq.apache.org/

我下载的是apache-activemq-5.12.0-bin.tar.gz,

解压到本地目录,进入到bin路径下,
运行activemq启动ActiveMQ。

运行方式:
启动 ./activemq start

ActiveMQ默认使用的TCP连接端口是61616,
5.0以上版本默认启动时,开启了内置的Jetty服务器,可以进入控制台查看管理。

启动ActiveMQ以后,登陆:http://localhost:8161/admin/

默认用户名admin/admin

这里我在虚拟机里启动,访问地址:
http://192.168.106.128:8161/admin/

ActiveMQ的控制台功能十分强大,管理起来也很直观。

二、使用Java连接

1.创建POM文件

在Eclipse中新建Java工程,这里使用Maven管理依赖,
下面是pom.xml:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>activemq-sample</groupId>
  6. <artifactId>activemq-sample</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>activemq-sample</name>
  9. <description>an activemq practice</description>
  10. <build>
  11. <sourceDirectory>src</sourceDirectory>
  12. <plugins>
  13.  
  14. <plugin>
  15. <artifactId>maven-compiler-plugin</artifactId>
  16. <version>3.1</version>
  17. <configuration>
  18. <source>1.7</source>
  19. <target>1.7</target>
  20. </configuration>
  21. </plugin>
  22. <!-- activemq-core 5.7.0 使用bunble打包,需要添加相关插件 -->
  23. <plugin>
  24. <groupId>org.apache.felix</groupId>
  25. <artifactId>maven-bundle-plugin</artifactId>
  26. <extensions>true</extensions>
  27. </plugin>
  28.  
  29. </plugins>
  30. </build>
  31. <dependencies>
  32. <!-- activemq的maven依赖 -->
  33. <dependency>
  34. <groupId>org.apache.activemq</groupId>
  35. <artifactId>activemq-core</artifactId>
  36. <version>5.7.0</version>
  37. <type>bundle</type>
  38. </dependency>
  39.  
  40. </dependencies>
  41.  
  42. </project>

  

在第一次添加activemq的maven依赖时报错,后来发现activemq-core 5.7.0采用了bundle的打包方式,

必须在pom中配置maven-bundle-plugin。

2.创建消息创建者 MsgProducer:

  1. import javax.jms.Connection;
  2. import javax.jms.ConnectionFactory;
  3. import javax.jms.Destination;
  4. import javax.jms.JMSException;
  5. import javax.jms.MessageProducer;
  6. import javax.jms.Session;
  7. import javax.jms.TextMessage;
  8.  
  9. import org.apache.activemq.ActiveMQConnectionFactory;
  10.  
  11. /**
  12. * @Description: Message Producer
  13. * @author: Bing Yue
  14. */
  15. public class MsgProducer {
  16. //如果你在本地启动,可以直接使用空的ActiveMQConnectionFactory构造函数
  17. private static final String BROKER_URL="failover://tcp://192.168.106.128:61616";
  18.  
  19. public static void main(String[] args) throws JMSException, InterruptedException{
  20. //创建连接工厂
  21. ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(BROKER_URL);
  22. //获得连接
  23. Connection conn = connectionFactory.createConnection();
  24. //start
  25. conn.start();
  26.  
  27. //创建Session,此方法第一个参数表示会话是否在事务中执行,第二个参数设定会话的应答模式
  28. Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
  29.  
  30. //创建队列
  31. Destination dest = session.createQueue("test-queue");
  32. //创建消息生产者
  33. MessageProducer producer = session.createProducer(dest);
  34.  
  35. for (int i=0;i<100;i++) {
  36. //初始化一个mq消息
  37. TextMessage message = session.createTextMessage("这是第 " + i+" 条消息!");
  38. //发送消息
  39. producer.send(message);
  40. System.out.println("send message:消息"+i);
  41. //暂停3秒
  42. Thread.sleep(3000);
  43. }
  44.  
  45. //关闭mq连接
  46. conn.close();
  47. }
  48.  
  49. }

  

3.创建消息接收者 MsgProducer:

  1. import javax.jms.Connection;
  2. import javax.jms.ConnectionFactory;
  3. import javax.jms.Destination;
  4. import javax.jms.JMSException;
  5. import javax.jms.Message;
  6. import javax.jms.MessageConsumer;
  7. import javax.jms.MessageListener;
  8. import javax.jms.Session;
  9. import javax.jms.TextMessage;
  10.  
  11. import org.apache.activemq.ActiveMQConnectionFactory;
  12.  
  13. /**
  14. *
  15. * @Description: Message Consumer
  16. * @author: Bing Yue
  17. */
  18. public class MsgConsumer implements MessageListener {
  19.  
  20. private static final String BROKER_URL="failover://tcp://192.168.106.128:61616";
  21.  
  22. public static void main(String[] args) throws JMSException{
  23.  
  24. //创建连接工厂
  25. ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(BROKER_URL);
  26. //获得连接
  27. Connection conn = connectionFactory.createConnection();
  28. //start
  29. conn.start();
  30.  
  31. //创建Session,此方法第一个参数表示会话是否在事务中执行,第二个参数设定会话的应答模式
  32. Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
  33. //创建队列
  34. Destination dest = session.createQueue("test-queue");
  35. //创建消息生产者
  36. MessageConsumer consumer = session.createConsumer(dest);
  37.  
  38. //初始化MessageListener
  39. MsgConsumer msgConsumer = new MsgConsumer();
  40.  
  41. //给消费者设定监听对象
  42. consumer.setMessageListener(msgConsumer);
  43.  
  44. }
  45.  
  46. /**
  47. * 消费者需要实现MessageListener接口
  48. * 接口有一个onMessage(Message message)需要在此方法中做消息的处理
  49. */
  50. @Override
  51. public void onMessage(Message msg) {
  52. TextMessage txtMessage = (TextMessage)msg;
  53. try {
  54. System.out.println("get message:" + txtMessage.getText());
  55. } catch (JMSException e) {
  56. e.printStackTrace();
  57. }
  58.  
  59. }
  60. }

  

运行MsgProducer,

登录后台查看test-queue队列,可以看到发出的消息正在等待被处理:

运行MsgConsumer,接收消息并在控制台打印:

通过这个实例可以对ActiveMQ的应用有一个简单的了解。

代码地址:https://github.com/bingyue/activemq-sample

在实际开发中,通常还需要设置优先级处理,大部分情况下,消息的发送和接收方都会启用多线程,
通过线程池来提高处理效率,解耦的同时保持业务处理能力。

ActiveMQ的应用实例的更多相关文章

  1. 消息队列入门(四)ActiveMQ的应用实例

    >>部署和启动ActiveMQ 去官网下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.12.0-bin.tar.gz, 解压到本 ...

  2. ActiveMQ 入门使用实例

    1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/download-archives.html 2.运行ActiveMQ 解压缩apache-active ...

  3. ActiveMQ简单入门实例

    一.下载MQ 官方网站下载:http://activemq.apache.org/ 我用的是 apache-activemq-5.15.0-bin 二.安装 我用的是64位所以双击 apache-ac ...

  4. 通过spring整合activeMQ实现jms实例

    写的很详细 http://blog.csdn.net/leonardo9029/article/details/43154385

  5. JMS & ActiveMQ小结

    JMS简介 JMS源于企业应用对于消息中间件的需求,使应用程序可以借助消息进行异步处理而互不影响.Sun公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能 ...

  6. ActiveMQ 学习第二弹

    经历了昨天的初识 ActiveMQ,正好今天下班有点事耽搁了还没法回家,那就再学习会 ActiveMQ 吧!现在官网的文档没啥好看的了,毕竟是入门学习,太深奥的东西也理解不了.然后看官网上有推荐书籍& ...

  7. ActiveMQ持久化

    ActiveMQ中,持久化是值对消息数据的持久化.在ActiveMQ中,默认的消息是保存在内存中的.当内存容量不足的时候,或ActiveMQ正常关闭的时候,会将内存中的未处理的消息持久化到磁盘中.具体 ...

  8. CAT部署安装文档

    多数软件都在/root/project/codebase/3rdpart redhat7用firewalld取代了iptables,遇到问题请添加redhat7关键字搜索,详情请参见Common ad ...

  9. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

随机推荐

  1. epoll讲解--转自知乎

    Ctrip AIO底层使用epoll https://blog.csdn.net/z69183787/article/details/52943637 首先我们来定义流的概念,一个流可以是文件,soc ...

  2. 《深入理解java虚拟机》第六章 类文件结构

    第六章 类文件结构   6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...

  3. Sql server 查询某个时间段,分布有几周,几月和几日

    1. 查询:以“周”为单位 --查询以下时间段内分别有几周 --时间段:“2017-09-01”到“2017-10-1” select number as wknum from master..spt ...

  4. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  5. c# 登录 防止sql注入 mysql数据库

    利用参数化 防止SQL注入 public string serachName(string name) { string result = ""; try { conn.Open( ...

  6. java中的基本数据类型一定存储在栈中吗?

    首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的. 下面让我们一起来分析一下原因: 基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型 ...

  7. oracle数据库自增主键重复

    select max(t.id) from T_PLAT_ENUM_VALUE tdrop sequence T_PLAT_ENUM_VALUE;create sequence T_PLAT_ENUM ...

  8. Bootstrap3.0学习第四轮(排版)

    详情请查看http://aehyok.com/Blog/Detail/10.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  9. 『实践』Matlab实现Flyod求最短距离及存储最优路径

    Matlab实现Flyod求最短距离及存储最优路径 一.实际数据 已知图中所有节点的X.Y坐标. 图中的节点编号:矩阵中的编号 J01-J62:1-62; F01-F60:63-122; Z01-Z0 ...

  10. redis拾趣(客户端连接,keys命令,数据备份,缓存有效期等)

    1.客户端连接 为了安全保护,redis支持绑定IP跟端口,这个通过conf配置文件中的bind跟port来设置. 绑定后登录client控制台时就需要写明ip(或者hostname)跟端口了,如: ...