ActiveMQ(二)来个hello world吧

ActiveMQ部署

  1. 从官方网站下载activeMQ。当前最新版本是5.5.0( Dependency on Java 1.6 (java 1.5 is no longer supported) )
  2. 这个版本现在不支持jdk1.5,如果使用会在启动activeMq的时候报错:
  3. bad version number in .class
  4. 正确启动activeMq在bin目录下的activeMq.bat文件。
  5. 正确启动服务之后可以测试端口是否别占用, activeMQ的默认端口是61616,在dos下运行netstat -an|find “61616“ 进行检查;

即可看到端口的占用情况,如果端口没有被占用,出现如下的界面:

C:\Users\liz>netstat -an|find  "61616“
TCP    0.0.0.0:61616          0.0.0.0:0              LISTENING
TCP    [::]:61616                [::]:0              LISTENING

这样表示安装成功!

ActiveMQ的控制台地址: http://127.0.0.1:8161/admin/

默认的登录帐号和密码是admin、admin

在Eclipse(或者你其它的开发工具)中新建一个项目,加入ActiveMQ的jar包(位置在安装目录的lib文件夹)

加入如上jar包到你的项目中。

发送消息

/**
 * Sender.java 
 * 发送者
 */
import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.DeliveryMode;  
import javax.jms.Destination;  
import javax.jms.MessageProducer;  
import javax.jms.Session;  
import javax.jms.TextMessage;  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory;  
  
public class Sender {  
    private static final int SEND_NUMBER = 5;  
  
    public static void main(String[] args) {  
    
        // ConnectionFactory :连接工厂,JMS 用它创建连接  
        ConnectionFactory connectionFactory; 
        
        // Connection :JMS 客户端到JMS  
        // Provider 的连接  
        Connection connection = null; 
        
        // Session: 一个发送或接收消息的线程  
        Session session; 
        
        // Destination :消息的目的地;消息发送给谁.  
        Destination destination; 
        
        // MessageProducer:消息发送者  
        MessageProducer producer; 
        
        // TextMessage message;  
        // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar  
        connectionFactory = new ActiveMQConnectionFactory(  
                ActiveMQConnection.DEFAULT_USER,  
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");  
        
        try { // 构造从工厂得到连接对象  
            connection = connectionFactory.createConnection();  
            
            // 启动  
            connection.start();  
            
            // 获取操作连接  
            session = connection.createSession(Boolean.TRUE,  
                    Session.AUTO_ACKNOWLEDGE);  
            
            // 获取session注意参数值FirstQueue是一个服务器的queue,须在在ActiveMq的console配置  
            destination = session.createQueue("FirstQueue");  
            
            // 得到消息生成者【发送者】  
            producer = session.createProducer(destination);  
            
            // 设置不持久化,此处学习,实际根据项目决定  
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
            
            // 构造消息,此处写死,项目就是参数,或者方法获取  
            sendMessage(session, producer);  
            
            session.commit();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != connection)  
                    connection.close();  
            } catch (Throwable ignore) {  
            }  
        }  
    }  
  
    public static void sendMessage(Session session, MessageProducer producer)  
            throws Exception {  
        for (int i = 1; i <= SEND_NUMBER; i++) {  
            TextMessage message = session.createTextMessage("ActiveMq 发送的消息" + i);  
            // 发送消息到目的地方  
  
            System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);  
            producer.send(message);  
        }  
    }  
}

接收消息

/**
 * Receiver.java
 * 接收者
 */
import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.Destination;  
import javax.jms.MessageConsumer;  
import javax.jms.Session;  
import javax.jms.TextMessage;  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory;  
  
public class Receiver {  
    public static void main(String[] args) {  
        // ConnectionFactory :连接工厂,JMS 用它创建连接  
        ConnectionFactory connectionFactory;  
        // Connection :JMS 客户端到JMS Provider 的连接  
        Connection connection = null;  
        // Session: 一个发送或接收消息的线程  
        Session session;  
        // Destination :消息的目的地;消息发送给谁.  
        Destination destination;  
        // 消费者,消息接收者  
        MessageConsumer consumer;  
        connectionFactory = new ActiveMQConnectionFactory(  
                ActiveMQConnection.DEFAULT_USER,  
                ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");  
        try {  
            // 构造从工厂得到连接对象  
            connection = connectionFactory.createConnection();  
            // 启动  
            connection.start();  
            // 获取操作连接  
            session = connection.createSession(Boolean.FALSE,  
                    Session.AUTO_ACKNOWLEDGE);  
            // 获取session注意参数值FirstQueue是一个服务器的queue,须在在ActiveMq的console配置  
            destination = session.createQueue("FirstQueue");  
            consumer = session.createConsumer(destination);  
            while (true) {  
                // 设置接收者接收消息的时间,为了便于测试,这里谁定为100s  
                TextMessage message = (TextMessage) consumer.receive(100000);  
                if (null != message) {  
                    System.out.println("收到消息" + message.getText());  
                } else {  
                    break;  
                }  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                if (null != connection)  
                    connection.close();  
            } catch (Throwable ignore) {  
            }  
        }  
    }  
}

这是写好的2个类,先运行接收消息的Receiver类,再运行Sender类。(当然这个时候你的ActionMQ是启动的)

在Sender控制台可以看到

发送消息:ActiveMq 发送的消息1
发送消息:ActiveMq 发送的消息2
发送消息:ActiveMq 发送的消息3
发送消息:ActiveMq 发送的消息4
发送消息:ActiveMq 发送的消息5

在Receiver控制台看到

收到消息ActiveMq 发送的消息1
收到消息ActiveMq 发送的消息2
收到消息ActiveMq 发送的消息3
收到消息ActiveMq 发送的消息4
收到消息ActiveMq 发送的消息5

一个完整的消息发送与接收就完成了,下面一篇文章分析ActionMQ消息

时间: 2024-09-23 11:34:27

ActiveMQ(二)来个hello world吧的相关文章

ActiveMQ在.net里客户端如何使用SSL或https

问题描述 ActiveMQ在.net里客户端如何使用SSL或https 10C ActiveMQ在.net里客户端如何使用SSL或https.Apache.NMS.ActiveMQ里是如何使用ssl的.我没找到相关的参数.谢谢. 解决方案 服务器端证书我已经弄好了,客户端不知道怎么传ssl相关的参数. 解决方案二: http://stackoverflow.com/questions/16400088/configuring-activemq-client-for-using-ssl-for-e

配置-如何禁用ActiveMQ服务器的trace方法

问题描述 如何禁用ActiveMQ服务器的trace方法 不知道如何禁用ActiveMQ服务器的trace方法 ActiveMQ服务器启动后,用telnet xxx.xxx.xxx.xxx 61614 连接mq服务器,telnet加上ip和mq中配置的ws端口号,连接成功后,用下面命令测试 TRACE / HTTP/1.1 HOST: xxx.xxx.xxx.xxx 返回的结果为: HTTP/1.1 200 OK Content-Type: message/http Content-Length

ActiveMQ如何实现2个应用通讯之间保持松耦合的关系的,请指教

问题描述 ActiveMQ如何实现2个应用通讯之间保持松耦合的关系的,请指教 ActiveMQ是一个很好的消息中间件,两个应用程序可以在对方系统不启动或者不知道对方网络位置的情况下保持正确的消息传输, 听说有个传输通道,这个传输通道是如何实现的,请高手指教 解决方案 消息队列 没有被处理就一直保存着 解决方案二: 消息队列中的消息是保存在数据库中还是保存在一个文件中?或者说消息队列的本质是什么

MQ、JMS以及ActiveMQ 关系的理解

Best-text mb-10代码  ms 的一个标准或者说是一个协议.  通常用于企业级应用的消息传递. 主要有topic 消息(1 对多), queue 消息(1对1).   activemq 是一个jms 的实现, apache 出的.    另外还其它的实现 jboss 啦啥的...   MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递

activeMQ到底是怎么个接受信息?

问题描述 小弟初学,网上看了好几个例子,都千遍一律,如消息发送出去,消息如果被接受,通过什么中转站什么的?要如何配置?求详细一个步骤,感激不尽 问题补充:消息消费者:public void consuMessage() throws Exception{ throws JMSException{ActiveMQConnectionFactory connFactory=new ActiveMQConnectionFactory("tcp://localhost:61616");conn

使用activeMQ实现jms

一:jms介绍         jms说白了就是java message service,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现,然后使用者使用他们的jar包进行开发使用即可.        另外在jms的API中,jms传递消息有两种方式,一种是点对点的Queue,还有一个是发布订阅的Topic方式.区别在于:        对于Queue模式,一个发布者发布消息,下面的接收者按队列顺序接收,比如发布了10个消息,两个接收者

activemq-利用ajax客户端就行activeMQ消息中间件的消息收发,如何设置topic的持久订阅啊?

问题描述 利用ajax客户端就行activeMQ消息中间件的消息收发,如何设置topic的持久订阅啊? 利用ajax客户端进行activeMQ消息中间件的消息收发,如何设置topic的持久订阅啊?具体语法怎么写啊? 解决方案 var amq = org.activemq.Amq; amq.init({ uri: 'amq.servlet', logging: true, timeout: 20, clientId:'topicClientA' }); var myHandler = { rcvM

【JAVA秒会技术之ActiveMQ】ActiveMQ的快速入门

ActiveMQ的快速入门 一.ActiveMQ介绍 1.ActiveMQ简介         MQ,即Message Queue,消息队列.         ActiveMQ,是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位. 2.JMS简介        JMS的全称是Java Message S

ActiveMQ持久化方式(转)

  消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息 中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送. 消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件.内存数据库或者远程数据库等,然后试图将消息发送 给接收者,发送成功则将消息从存储中删除,失败则继续尝试.消息中心启动以后首先