ActiveMQ消息队列服务的安装与使用

ActiveMQ消息队列服务的安装与使用:
    1.本次的ActiveMQ服务端安装在Linux系统中:
        1.1:服务的安装:下载Linux版本的压缩包,进入bin目录 执行命令activemq start 启动
            查看服务是否安装好:
            进入管理后台:
            http://192.168.2.128:8161/admin
            用户名:admin
            密码:admin
            进入即表明安装成功!
        1.2:服务的客户端的使用:
            1.2.1:添加客户端的jar包,本次测试采用queue和topic方式测试消息的发送者和消息的接收者

            public class TestActiveMQ {
                @Test
                public void testQueueProducer() throws JMSException {
                    /*
                     * 发送者步骤: 
                     * 1.创建ConnectionFactory对象,需要指定服务端ip即端口号
                     * 2.使用ConnectionFactory对象创建一个Connection对象
                     * 3.开启连接,使用connection对象调用start()方法 
                     * 4.使用connection对象创建一个session对象
                     * 5.使用session对象创建一个destination对象(即queue或者topic对象),此处创建一个queue对象
                     * 6.使用session对象创建一个producer对象. 
                     * 7.创建一个message对象,创建一个textmessage对象(可以使用session.createTextMessage来获取,也可以new一个消息对象)
                     * 8.使用producer对象发送消息 
                     * 9关闭资源
                     */
                    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.2.128:61616");
                    Connection connection = connectionFactory.createConnection();
                    connection.start();
                    // 参数说明:第一个参数表示是否要开启事务,第二个参数表示消息的应答模式:自动应答,手动应答
                    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                    // 参数说明:消息队列的名称,消费者通过该名称获取消息
                    Queue queue = session.createQueue("test-queue");
                    // 参数说明:为创建的Queue对象
                    MessageProducer producer = session.createProducer(queue);
                    TextMessage textMessage = session.createTextMessage("完美,测试成功 ");
                    producer.send(textMessage);
                    producer.close();
                    session.close();
                    connection.close();
                }
                @Test
                public void testQueueConsumer() throws Exception{
                    /*接收者实现步骤:
                     * 1.创建一个connectionfactory对象,
                     * 2.根据connectionfactory对象获取一个connection对象
                     * 3.开启连接,使用connection对象开启连接
                     * 4.使用connection对象创建一个session对象
                     * 5.使用session对象创建一个destination对象,由于该方法为接收者,参数说明:需要从哪个消息队列中取值,(即消息的名称)
                     * 6.使用session对象创建一个consumer对象
                     * 7.接收消息
                     * 8.打印消息
                     * 9.关闭资源
                     * */
                    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.2.128:61616");
                    Connection connection = connectionFactory.createConnection();
                    connection.start();
                    // 参数说明:第一个参数表示是否要开启事务,第二个参数表示消息的应答模式:自动应答,手动应答
                    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                    //参数说明:表示需要从哪个消息队列中去消息[消息队列的名称]
                    Queue queue = session.createQueue("test-queue");
                    MessageConsumer consumer = session.createConsumer(queue);
                    //接收消息:即设置消息监听器,有消息进入此匿名内部类
                    consumer.setMessageListener(new MessageListener() {
                        
                        @Override
                        public void onMessage(Message message) {
                            TextMessage textMessage = (TextMessage) message;
                            try {
                                String text = textMessage.getText();
                                System.out.println("接收到的消息为>>>>>>>"+text);
                            } catch (JMSException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                    System.in.read();
                    consumer.close();
                    session.close();
                    connection.close();
                }
                @Test
                public void testTopicProducer() throws Exception{
                    /*发送者步骤:
                     * 1.创建一个connectionfactory对象
                     * 2.根据connectionfactory对象获取connection对象
                     * 3.开启连接,使用connection对象中的start()方法
                     * 4.使用connection对象创建一个session对象
                     * 5.使用session对象创建一个destination对象
                     * 6.使用session对象创建一个producer对象
                     * 7.创建一个textmessage对象,可以使用session创建,也可以new一个对象出来
                     * 8.使用producer对象发送消息
                     * 9.关闭资源
                     * */
                    ConnectionFactory connectionFactory = new  ActiveMQConnectionFactory("tcp://192.168.2.128:61616");
                    Connection connection = connectionFactory.createConnection();
                    connection.start();
                    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                    Topic topic = session.createTopic("test-topic");
                    MessageProducer producer = session.createProducer(topic);
                    TextMessage textMessage = session.createTextMessage("测试~~~~~~~~~");
                    producer.send(textMessage);
                    producer.close();
                    session.close();
                    connection.close();
                }
                @Test
                public void testTopicConsumer() throws Exception{
                    /*接收者实现步骤:
                     * 1.创建一个connectionfactory对象,
                     * 2.根据connectionfactory对象获取一个connection对象
                     * 3.开启连接,使用connection对象开启连接
                     * 4.使用connection对象创建一个session对象
                     * 5.使用session对象创建一个destination对象,由于该方法为接收者,参数说明:需要从哪个消息队列中取值,(即消息的名称)
                     * 6.使用session对象创建一个consumer对象
                     * 7.接收消息
                     * 8.打印消息
                     * 9.关闭资源
                     * */
                    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.2.128:61616");
                    Connection connection = connectionFactory.createConnection();
                    connection.start();
                    // 参数说明:第一个参数表示是否要开启事务,第二个参数表示消息的应答模式:自动应答,手动应答
                    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                    //参数说明:表示需要从哪个消息队列中去消息[消息队列的名称]
                    Topic topic = session.createTopic("test-topic");
                    MessageConsumer consumer = session.createConsumer(topic);
                    //接收消息:即设置消息监听器,有消息进入此匿名内部类
                    consumer.setMessageListener(new MessageListener() {
                        
                        @Override
                        public void onMessage(Message message) {
                            TextMessage textMessage = (TextMessage) message;
                            try {
                                String text = textMessage.getText();
                                System.out.println("接收到的消息为>>>>>>>"+text);
                            } catch (JMSException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                    System.in.read();
                    consumer.close();
                    session.close();
                    connection.close();
                }
            }
        1.2.2:使用spring整合activeMQ:需要导入整合jar,applicationContext-activemq.xml配置文件的配置
                整合的依赖jar:
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jms</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context-support</artifactId>
                </dependency>
                配置文件:
                <bean id="targetConnection" class="org.apache.activemq.ActiveMQConnectionFactory">
                    <property name="brokerURL" value="tcp://192.168.25.130:61616"></property>
                </bean>
                <!-- 通用的connectionfacotry 指定真正使用的连接工厂 -->
                <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
                    <property name="targetConnectionFactory" ref="targetConnection"></property>
                </bean>
                <!-- 接收和发送消息时使用的类 -->
                <bean class="org.springframework.jms.core.JmsTemplate">
                    <property name="connectionFactory" ref="connectionFactory"></property>
                </bean>
                <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
                    <constructor-arg name="name" value="item-change-queue"></constructor-arg>
                </bean> 
                <!-- <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
                    <constructor-arg name="name" value="item-change-topic"></constructor-arg>
                </bean> -->
                <bean id="myMessageListener" class="com.itheima.activemq.spring.MyMessageListener"></bean>
                <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
                    <property name="connectionFactory" ref="connectionFactory"></property>
                    <property name="destination" ref="topicDestination"></property>
                    <property name="messageListener" ref="myMessageListener"></property>
                </bean>
            *消息的发送者
                public void testJMSProducer() throws Exception{
                    /*实现步骤:首先需要导入相应的整合jar,然后添加相应的配置文件,最后代码实现
                     * 1.在配置文件中配置ActiveMQConnectionFactory对象,targetConnectionFactory
                     * 2.配置spring的SingleConnectionFactory对象,并且将ActiveMQConnectionFactory对象注入connectionFactory
                     * 3.配置用于发送消息的对象JmsTemplate,并将spring的连接工厂注入
                     * 4.配置Destination对象,有ActiveMQQueue和ActiveTopic之分.需要配置构造器的name属性,为自定义的一个消息队列的名称
                     * 5.配置自定义的消息监听器,和系统的消息监听器
                     * 6.系统监听器需要注入的属性有:connectionFactory,destination,和messageListener
                     * 
                     * 代码实现:
                     * 1.获取JmsTemplate对象
                     * 2.获取destination对象
                     * 3.使用JmsTemplate对象发送消息,参数说明:代码部分体现
                     * 4.线程sleep:为了保证该事件必须完成之后才发送消息,以免造成空指针异常
                     * */
                    JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
                    Destination destination = applicationContext.getBean(Destination.class);
                    //参数说明:第一个参数为目标对象即queue或者topic,第二个参数为消息创建对象,创建匿名内部类即可
                    jmsTemplate.send(destination, new MessageCreator() {
                        //参数说明:该session对象用于创建消息对象
                        public Message createMessage(Session session) throws JMSException {
                            return session.createTextMessage("lalala~~~~~~~~");
                        }
                    });
                    Thread.sleep(1000);
                }
            *消息的接收者:自定义一个消息监听器,配置在系统消息监听器即可
            public void onMessage(Message message) {
                try {
                    TextMessage textMessage = (TextMessage) message;
                    System.out.println("收到的消息为>>>>>>>>"+textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值