一、部署和启动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. Jmeter Web 性能测试入门 (四):一个小实例带你学会 Jmeter 脚本编写

    测试场景: 模拟并发100个user,在TesterHome 站内搜索VV00CC 添加线程组 添加HTTP信息头管理器 添加HTTP Sampler 填写HTTP Sampler中的信息 添加监听器 ...

  2. RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)

    一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...

  3. Java消息队列-Spring整合ActiveMq

    1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Jav ...

  4. Linux网络编程学习(九) ----- 消息队列(第四章)

    1.System V IPC System V中引入的几种新的进程间通信方式,消息队列,信号量和共享内存,统称为System V IPC,其具体实例在内核中是以对象的形式出现的,称为IPC 对象,每个 ...

  5. 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

    一.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,RabbitM ...

  6. RabbitMQ 消息队列入门

    文档 入门 主要的内容:one two three four five six seven 前言 中间件 消息队列 异步处理,注册完发短信 应用解耦,订单接口调用扣库存接口,失败了怎么办? 流量削峰, ...

  7. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  8. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  9. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  10. RabbitMQ消息队列(四)-服务详细配置与日常监控管理

    RabbitMQ服务管理 启动服务:rabbitmq-server -detached[ /usr/local/rabbitmq/sbin/rabbitmq-server -detached ] 查看 ...

随机推荐

  1. jQuery EasyUI datagrid实现本地分页的方法

    http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...

  2. 详细解读MySQL中的权限

    一.前言 很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话.因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪 些权限. 现在很多mysql用着root账户 ...

  3. WAF与IPS的区别总结

    谁是最佳选择? Web应用防护无疑是一个热门话题.由于技术的发展成熟和人们对便利性的期望越来越高,Web应用成为主流的业务系统载体.在Web上“安家”的关键业务系统中蕴藏的数据价值引起攻击者的青睐,网 ...

  4. C# 根据IP地址获取城市

    using System; using System.IO; using System.Net; using System.Text; using System.Web.Script.Serializ ...

  5. NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool

    错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool/impl ...

  6. poj1013.Counterfeit Dollar(枚举)

    Counterfeit Dollar Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 415  Solved: 237 Description Sally ...

  7. 教你如何---构建良好的windows程序(初学者必看)

    一使用菜单栏和工具栏 1.菜单栏和工具栏有什么作用和优点: 通过菜单栏把应用程序的功能进行分组,能够方便用户查找和使用,下图所示的菜单栏包含的每一项都是顶层菜单项,顶层菜单项下的选项称为”子菜单”或” ...

  8. MySQL的分页

    有朋友问: MySQL的分页似乎一直是个问题,有什么优化方法吗?网上看到网上推荐了一些分页方法,但似乎不太可行,你能点评一下吗? 方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL ...

  9. django-cms 代码研究(六)plugin的深入分析

    示例代码: https://github.com/divio/djangocms-picture 以上一个图片的插件,安装后可在页面中添加图片,效果如下图: 以此为切入点,分析plugin的逻辑: 分 ...

  10. microsoft office安装选择

    office分为零售版和批量授权版 零售版(文件名以cn开头)需要提供序列号才可以安装,而批量授权版(文件名以SW开头)可以先安装试用一段时间.