版权声明: https://blog.csdn.net/zdp072/article/details/27237549

一. 开篇语

继上一篇weblogic中使用jms发送和接受消息的文章后, 本文使用apache的一个开源组件ActiveMQ接着探讨JMS的话题, 本篇仅仅是ActiveMQ的一个入门的样例,
希望对您有所帮助.

二. ActiveMQ

1. ActiveMQ简单介绍:

ActiveMQ是Apache的一个能力强劲的开源消息总线, 它全然支持JMS1.1和JavaEE1.4规范的JMS Provider实现.

2. ActiveMQ特性:

1.) 多种语言和协议编写client。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。

应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2.) 全然支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3.) 对Spring的支持,ActiveMQ能够非常easy内嵌到使用Spring的系统里面去,并且也支持Spring2.0的特性
4.) 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測试,当中通过JCA 1.5 resourceadaptors的配置,

     能够让ActiveMQ能够自己主动的部署到不论什么兼容J2EE1.4商业服务器上
5.) 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6.) 支持通过JDBC和journal提供快速的消息持久化
7.) 从设计上保证了高性能的集群,client-服务器,点对点
8.) 支持Ajax
9.) 支持与Axis的整合
10.) 能够非常easy得调用内嵌JMS provider,进行測试

3. 环境准备:

1.) 下载ActiveMQ: 

     http://activemq.apache.org/download.html, 我下载的是apache-activemq-5.2.0

2.) 执行ActiveMQ server

     解压缩下载好的文件, 双击bin/activemq.bat 启动server, ActiveMQ内置了jetty服务器, 默认使用TCP连接port为61616.

     ActiveMQ提供一个用于监控ActiveMQ的admin应用: http://127.0.0.1:8161/admin

3.) 在Eclipse中建立Javaproject, 并导入activemq-all-5.2.0.jar包

4.) 新建两个Java类: 消息生产者MsgSender和消息消费者MsgReceiver

4. 代码測试(P2P):

1.) 消息生产者: MsgSender

/**
* Message Provider
*/
public class MsgSender { // ConnectionFactory: use to create JMS connection
private static ConnectionFactory connectionFactory; // Connection: connect message provider and JMS server
private static Connection connection; // Session: a message send or receive thread
private static Session session; // Destination: use to sign the message type
private static Destination destination; // MessageProducer:sender
private static MessageProducer messageProducer; /**
* init the JMS object
*/
public static void init() throws Exception {
// use ActiveMQ to to create connection factory.
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616"); // get the connection from connection factory
connection = connectionFactory.createConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
messageProducer = session.createProducer(destination);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); connection.start();
} /**
* send activeMq message
*/
public static void sendMessage() throws Exception {
for (int i = 1; i <= 5; i++) {
TextMessage message = session.createTextMessage("ActiveMq message " + i);
System.out.println("send:" + "ActiveMq message " + i);
messageProducer.send(message);
}
session.commit();
} /**
* release resource
*/
public static void release() throws Exception {
messageProducer.close();
session.close();
connection.close();
} /**
* main method
*/
public static void main(String[] args) throws Exception {
init();
sendMessage();
release();
}
}

2.) 消息消费者: MsgReceiver

/**
* Message Consumer
*/
public class MsgReceiver {
// ConnectionFactory: use to create JMS connection
private static ConnectionFactory connectionFactory; // Connection: connect message provider and JMS server
private static Connection connection; // Session: a message send or receive thread
private static Session session; // use to sign the message type
private static Destination destination; // MessageConsumer: receiver
private static MessageConsumer messageConsumer; /**
* init the JMS object
*/
public static void init() throws Exception {
// use ActiveMQ to to create connection factory.
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616"); // get the connection from connection factory
connection = connectionFactory.createConnection();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("myQueue");
messageConsumer = session.createConsumer(destination); connection.start();
} /**
* receive activeMq message
*/
public static void receiveMessage() throws Exception {
while (true) {
TextMessage message = (TextMessage) messageConsumer.receive();
if (message != null) {
System.out.println("receive: " + message.getText());
} else {
break;
}
}
} /**
* release resource
*/
public static void release() throws Exception {
messageConsumer.close();
session.close();
connection.close();
} /**
* main method
*/
public static void main(String[] args) throws Exception {
init();
receiveMessage();
release();
}
}

3.) 源代码下载地址: http://download.csdn.net/detail/zdp072/7422401

apache ActiveMQ之初体验的更多相关文章

  1. JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

    JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...

  2. Apache Beam入门及Java SDK开发初体验

    1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...

  3. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  4. Flume日志采集系统——初体验(Logstash对比版)

    这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...

  5. Flume 实战(1) -- 初体验

    前言: Flume-ng是数据收集/聚合/传输的组件, Flume-ng抛弃了Flume OG原本繁重的zookeeper和Master, Collector, 其整体的架构更加的简洁和明了. 其基础 ...

  6. (一)SpringBoot基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  7. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  8. spring cloud 初体验

    spring cloud分为注册端.客户端以及消费端 初体验的理解就是: 注册端就是将之前所有的应用在这边进行注册,然后给每个应用都生成自己的标识,这些应用就是来自于客户端,消费端则通过调用注册端(有 ...

  9. 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

    ----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafk ...

随机推荐

  1. saas模式

    SaaS是Software-as-a-service(软件即服务).SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件.硬件运作平台,并负责所有前期的实施.后期的维护等一系列服务,企业无需购 ...

  2. C盘空间被占满的原因

    如何禁止IIS在C:\Windows\System32\LogFiles\HTTPERR中生成日志文件C:\Program Files\Microsoft SQL Server\MSSQL10_50. ...

  3. 从一个带有http://网络文件中获取文件名

    例如文件网址为: http://a.hiphotos.baidu.com/image/h%3D200/sign=c3da85e50123dd543e73a068e108b3df/80cb39dbb6f ...

  4. ZUI分页器的使用案例(ECLIPSE SMS项目)

    不足:并未编写导出功能 HTML代码: <form action="${basePath}/SMSLogList.cwai" method="post" ...

  5. Java代理(二)

    前面说到了java的静态代理,这次来看看动态代理. 假设有如下接口和实现方法: package proxy; public interface Subject { public void reques ...

  6. IDEA使用总结1-Github下载代码和上传代码到Git

    1. 首先你需要在IDEA中创建一个项目,创建完项目后使能版本管理插件 选择git后创建本地git仓库成功,提示如下 2.第二步 commit代码到 commit时会提示是否需要进行检查什么的 3.第 ...

  7. js实现链式操作

    前言:前不久阿里远程面试时问了我一个问题,如下: function Person(){}; var person = new Person(); //实现person.set(10).get()返回2 ...

  8. php5.5过渡--变量

    单纯的定义变量,如: $usernumber = $_POST['usernumber']; 会出现警告: Notice: Undefined index: usernumber in ... 规范问 ...

  9. cordova打包安卓或IOS应用

    1,先搞个java jdk.我先用的1.7版本的,用cordova打包的时候各种报错,应该是向下不兼容吧.又换了个1.8版本.装jdk一定要注意jdk跟jre不能都装在目标文件夹的根目录下,jdk跟j ...

  10. 可执行文件patch技术&&持续更新

    前言 在ctf比赛中, 有时我们需要对可执行文件进行patch, 或者在植入后门时,patch也是常用的手段.不过手工patch比较麻烦,下面介绍几个工具.本文介绍遇到的各种技术,不断更新. ELF ...