ActiveMQ的P2P示例(点对点通信)

(1)下载安装activemq,启动activeMQ。

  详细步骤参考博客:http://www.cnblogs.com/DFX339/p/9050878.html

 

(2)新建maven项目(java项目或者web项目都可以)

代码下载地址:https://github.com/DFX339/activeMQ_demo.git

目录结构如下,需要编写的文件: Consumer.java    Provider.java   pom.xml

 

生产者的创建: Provider.java

package cn.dfx.activeMQ_demo.queue;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
 * activemq的消息
 * @author Administrator
 *
 */
public class Provider {

      public static void main(String[] args) {
          System.out.println("进入生产者--");
            //连接信息设置
            String username = "system";
            String password = "manager";
            String brokerURL = "failover://tcp://localhost:61616";
            //默认的URL的值:ActiveMQConnection.DEFAULT_BROKER_URL;
            System.out.println("默认的URL:"+brokerURL); 
            //连接工厂
            ConnectionFactory connectionFactory = null;
            //连接
            Connection connection = null;
            //会话 接受或者发送消息的线程
            Session session = null;
            //消息的目的地
            Destination destination = null;
            //消息生产者
            MessageProducer messageProducer = null;
            //实例化连接工厂
            connectionFactory = new ActiveMQConnectionFactory(username, password, brokerURL);

            try {
                //通过连接工厂获取连接
                connection = connectionFactory.createConnection();
                //启动连接
                connection.start();
                //创建session
                session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
                //创建一个名称为QueueTest的消息队列
                destination = session.createQueue("QueueTest");
                //创建消息生产者
                messageProducer = session.createProducer(destination);
                //发送消息
                TextMessage message = null;
                TextMessage message1 =  session.createTextMessage();
                message1.setText("这是字符串呀");
                for (int i=200; i<220; i++) {
                    //创建要发送的文本信息
                    message = session.createTextMessage("Queue消息测试" +(i+1));
                    //通过消息生产者发出消息 
                    messageProducer.send(message);
                    messageProducer.send(message1);
                    System.out.println("发送成功:" + message.getText());
                }
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(null != connection){
                    try {
                        connection.close();
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            }

        }
}

 

消费者的创建: Consumer.java

package cn.dfx.activeMQ_demo.queue;

import javax.jms.Session;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Consumer {
    
    public static void main(String[] args) {
        System.out.println("进入消费者--");
        //连接信息设置
        String username = "system";
        String password = "manager";
        String brokerURL = ActiveMQConnection.DEFAULT_BROKER_URL;
        //连接工厂
        ConnectionFactory connectionFactory = null;
        //连接
        Connection connection = null;
        //会话 接受或者发送消息的线程
        Session session = null;
        //消息的目的地
        Destination destination = null;
        //消息消费者
        MessageConsumer messageConsumer = null;
        //实例化连接工厂
        connectionFactory = new ActiveMQConnectionFactory(username, password, brokerURL);

        try {
              System.out.println("消费者开始建立连接-----");
            //通过连接工厂获取连接
            connection = connectionFactory.createConnection();
            //启动连接
            connection.start();
            System.out.println("消费者开始启动连接-----");
            //创建session
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //创建一个连接QueueTest的消息队列
            destination = session.createQueue("QueueTest");
            //创建消息消费者
            messageConsumer = session.createConsumer(destination);
            System.out.println("消费者创建后-----");
            while (true) {
                System.out.println("消费者准备接收消息-----");
                TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
                System.out.println("消费者成功接收消息-----");
                if(textMessage != null){
                    System.out.println("成功接收消息:" + textMessage.getText());
                }else {
                    break;
                }
            }
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

 

项目依赖包的配置文件: pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.dfx</groupId>
    <artifactId>activeMQ_demo</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>activeMQ_demo Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <build>
        <finalName>activeMQ_demo</finalName>
        <plugins>
            <plugin>
                <inherited>true</inherited>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>${compiler.source}</source>
                    <target>${compiler.target}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <compilerArguments>
                        <extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
        
        </plugins>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <compiler.source>1.7</compiler.source>
        <compiler.target>1.7</compiler.target>

        <!-- servlet/jsp/EL (2.4/2.0/?)(2.5/2.1/2.1),(3.0/2.2/2.2),(3.1/2.3/3.0) -->
        <servlet.version>3.1.0</servlet.version>
        <jsp.version>2.3.1</jsp.version>
        <jstl.version>1.2</jstl.version>
        <junit.version>4.12</junit.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- activemq的依赖 -->
        <dependency>
            <groupId>javax.jms</groupId>
             <artifactId>jms</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.5.0</version>
        </dependency>

    <!-- 引入spring的相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.3.RELEASE</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency> </dependencies> </project>

 

在这之前先启动 activemq

在这之前先启动 activemq

在这之前先启动 activemq

运行 Provider.java (发送消息到队列中), 出现如下结果:

 

运行Consumer.java(从队列中取出消息) ,出现结果如下

 

注: 消息提供者(provider)可以不断的发送消息,消费者(consumer)一直会监听,然后读取。

 posted on 2018-05-17 14:50  阿叮339  阅读(663)  评论(0编辑  收藏  举报