activeMQ使用总结

一、下载activeMQ

官方网站下载:http://activemq.apache.org/,我这边下载的是apache-activemq-5.15.3-bin,解压到本地目录,双击D:\apache-activemq-5.15.3\bin\win64\activemq.bat运行activeMQ。

启动后打开http://localhost:8161/admin/,输入用户名/密码:admin/admin,即可登录。

二、spring集成activeMQ

1、引入依赖包

        <!-- xbean 如<amq:connectionFactory /> -->
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
            <version>3.16</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.9.0</version>
        </dependency>
<!-- 集成JMS -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.1.9.RELEASE</version>
        </dependency>

2、配置activeMQ.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/jms
        http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
        http://activemq.apache.org/schema/core
        http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd">

<amq:connectionFactory id="amqConnectionFactory"
brokerURL="${brokerURL}" userName="admin" password="admin" />

<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
<property name="sessionCacheSize" value="100" />
</bean>

<!-- Producer star -->

<!-- 定义JmsTemplate的Queue类型 -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory" />
<!-- 非pub/sub模型(发布/订阅),即队列模式 -->
<property name="pubSubDomain" value="false" />
</bean>

<!-- Producer end-->

<!-- Consumer start-->

<!-- 定义Queue监听器 -->
<jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
<jms:listener destination="test.queue" ref="testMQHandler"/>
</jms:listener-container> 

<!-- Consumer  end -->

</beans>  

3、web.xml

      <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springContext.xml,classpath*:config/ActiveMQ.xml</param-value>

      </context-param>

4、生产者实现类

        @Autowired
@Qualifier("jmsQueueTemplate")

private JmsTemplate jmsTemplate;// 通过@Qualifier修饰符来注入对应的bean

public void send(final String queueName ,  final String message_type,  final String message) {
        
        final String uuid = UUID.randomUUID().toString();
        log.info("进入队列发送 :" + queueName + ";" + "消息:" + message + "uuid:" + uuid);
        
        try {
            jmsTemplate.send(queueName, new MessageCreator() {
                public Message createMessage(Session session) throws JMSException {
                    TextMessage textMessage = session.createTextMessage(message);
                    textMessage.setStringProperty("destName", queueName);
                    textMessage.setStringProperty("uuid", uuid);
                    textMessage.setJMSType(message_type);
                    return textMessage;
                }
            });
        } catch (Exception e) { e.printStackTrace();
            // jms消息发送异常
            log.error("进入队列发送异常 :" + queueName + ";" + "异常原因" + e.getMessage() + "uuid:" + uuid);
        }
        log.info("进入队列发送结束 :" + queueName + ";" + "uuid:" + uuid);

    }

5、消费者实现类

/**
 * jms 消息接受监听扩展抽象类 
 *
 */
public abstract class AbstractReceiver implements MessageListener {

public void onMessage(Message message) {
// 回调函数
messageCallBack(message);
}

/**
* 回调方法用于消息接受处理操作

* @param message
*/
public abstract void messageCallBack(Message message);

}

@Component
public class TestMQHandler extends AbstractReceiver {
    private static Logger logger = Logger.getLogger(TestMQHandler.class);
    /**
     * 
     * @param message the Message
     */
    @Override
    public void messageCallBack(Message message) {
        try {
            String msg = ((TextMessage) message).getText();
            String type = message.getJMSType();
            logger.info("msg=" + msg + ";type=" + type);
           
           
        } catch (Exception e) {
        e.printStackTrace();
        }
    }
}

三、总结

1、相关概念

Provider/MessageProvider:生产者
Consumer/MessageConsumer:消费者
P2P:Point to Point,点对点通信消息模型
Pub/Sub:Publish/Subscribe,发布订阅消息模型
Queue:队列,目标类型之一,和P2P结合
Topic:主题,目标类型之一,和Pub/Sub结合
ConnectionFactory:连接工厂,JMS用它创建连接
Connnection:JMS Client到JMS Provider的连接
Destination:消息目的地,由Session创建
Session:会话,由Connection创建,实质上就是发送、接受消息的一个线程,因此生产者、消费者都是Session创建的

2、两种消息传输方式

Queue(队列模式):消息生产者发送消息到队列,消息消费者从队列中接收消息(只能由一个消费者进行消费)
Topic(发布/订阅模式):消息生产者将消息发布到某个主题,消息订阅者则从主题订阅消息(可以由多个消费者进行消费)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值