ActiveMq使用

首先自己搭建一个acticemq服务器,下载http://activemq.apache.org/(现在最新的版本是5.8.0)。
将文件解压,直接运行bin文件夹下的activemq.bat文件,查看doc窗口,要是没出现异常信息的话,可以认为是启动好了,在浏览器上面输入:http://127.0.0.1:8161/admin。这个时候会弹出一个对话框,输入用户名和密码。(在activemq里面默认使用的是jetty容器,而默认情况下登录该容器是需要权限验证的,用户名和密码都是admin,可以查看conf\jetty-realm.properties)。如果这里不需要权限验证,将conf/jetty.xml下面的  <bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">
        <property name="name" value="BASIC" />
        <property name="roles" value="admin" />
        <property name="authenticate" value=" false" />
    </bean>。使用代码创建连接用于发送和接受消息的时候也需要密码,查看conf\credentials.properties文件。目前来说简单的服务器算是好了,开始代码。

发送端代码:public void send() {
try {
// 创建一个连接工厂
String url = "tcp://127.0.0.1:61616";
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
// 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
connectionFactory.setUserName("system");
connectionFactory.setPassword("manager");
// 创建连接
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建目标,就创建主题也可以创建队列
Destination destination = session.createQueue("TEST");
// 创建消息生产者
MessageProducer producer = session.createProducer(destination);
// 设置持久化,DeliveryMode.PERSISTENT和DeliveryMode.NON_PERSISTENT
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
// 创建消息
String text = "测试消息";
TextMessage message = session.createTextMessage(text);
// 发送消息到ActiveMQ
producer.send(message);
message.acknowledge();
// 关闭资源
session.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
接受端代码:
public class JmsReceiverListener implements MessageListener,ExceptionListener,Runnable{

//连接工厂,JMS用它来创建连接
ConnectionFactory connectionFactory;
//JMS客户端到JMS provider的连接
Connection connection;
//一个发送或者接受消息的线程
Session session;
//消息的目的地
Destination destination;
    //消息的消费者(消息的接受者)
MessageConsumer consumer;

public JmsReceiverListener() throws JMSException{
String url = "tcp://127.0.0.1:61616";
// 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
connectionFactory = new ActiveMQConnectionFactory("system","manager",url);
// 创建连接
    connection = connectionFactory.createConnection();
    connection.setExceptionListener(this);  //异常处理
connection.start();
// 创建Session,如何为true表示消息一直在队列当中不会被取走,及时没有被消费掉,如果为false的话则表示消费了就会被取走
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建目标,就创建主题也可以创建队列
destination = session.createQueue("test");
// 创建消息消费者
consumer = session.createConsumer(destination);

}

public void run(){
try {
        consumer.setMessageListener(this);
        } catch (JMSException e) {
        e.printStackTrace();
        }
}


    @Override
    public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage)message;
String text=null;
            try {
            text = textMessage.getText();
            } catch (JMSException e) {
             e.printStackTrace();
            }
System.out.println("Received: " + text);
} else {
System.out.println("Received: " + message);
}
    }

/* (non-Javadoc)
     * @see javax.jms.ExceptionListener#onException(javax.jms.JMSException)
     */
    @Override
    public void onException(JMSException exception) {
   System.out.println("消息异常"); 
    }

     public static void main(String[] args) throws JMSException {
    JmsReceiverListener listener=new JmsReceiverListener();
    new Thread(listener).start(); 
    }
}

简单的用于消息的发送、接受是可以完成了。

猜你喜欢

转载自qingcyangg.iteye.com/blog/1825819