淘淘商城——ActiveMQ发送queue消息

我们在taotao-manager和taotao-search工程中都会用到消息服务,因此我们可以选择其中任何一个工程来进行测试,这里我们使用taotao-manager-service工程(taotao-manager的子工程)来测试一下面对面发送消息和接收消息。
首先,我们需要在taotao-manager-service工程中添加对activemq的maven依赖,如下图所示,activemq的版本号在taotao-parent工程中已经统一定义好了,我们使用的是5.11.2版本的Jar包,之所以选择这个版本的Jar包,是因为这个版本的Jar包还没有spring相关的包结构,与spring结合不会有问题,我们安装的activemq服务是5.12.0版本的,它里面的Jar包是有spring相关的Jar包的,这样会引起Jar包冲突,出现各种各样的问题,因此我们虽然安装的是5.12.0版本的activemq,但是我们使用的Jar包却是5.11.2版本。
这里写图片描述
下面我们在taotao-manager-service工程中新建一个测试包和单元测试类,如下图所示。
这里写图片描述
为方便大家复制,现将TestActiceMQ单元测试类的代码贴出。

public class TestActiceMQ {

    @Test
    public void testQueueProducer() throws Exception {
        /*
         * 1.创建一个连接工厂对象——ConnectionFactory对象,需要指定ActiceMQ服务的ip及端口号。
         *   注意参数brokerURL的开头是tcp://,而不是我们通常所见的http://,端口是61616而不是我们访问ActiceMQ
         *   后台管理页面时所使用的8161。
         */
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.129:61616");
        // 2.使用ConnectionFactory对象来创建一个Connection对象
        Connection connection = connectionFactory.createConnection();
        // 3.开启连接,需要调用Connection对象的start方法
        connection.start();
        /*
         * 4.使用Connection对象创建一个Session对象
         *   第一个参数:是否开启事务(ActiceMQ的事务),一般不使用分布式事务,因为它特别消耗性能,而且顾客体验特别差,
         *            现在互联网的做法是保证数据的最终一致(也就是允许暂时数据不一致)。比如顾客下单购买东西,一旦订单生成完就立刻响应给用户
         *            下单成功。至于下单后一系列的操作,比如通知会计记账、通知物流发货、商品数量同步等等都先不用管,只需要发送一条消息到消息队列,
         *            消息队列来告知各模块进行相应的操作,一次告知不行就两次,直到完成所有相关操作为止,这也就做到了数据的最终一致性。
         *            如果第一个参数设为true,那么第二个参数将会被直接忽略掉。如果第一个参数为false,那么第二个参数才有意义。
         *   第二个参数:消息的应答模式,常见的有手动应答和自动应答两种模式。我们一般使用自动应答模式。
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 5.使用Session对象创建一个Destination对象,目的地有两种形式,一种是queue,一种是topic
        Queue queue = session.createQueue("test-queue"); // 不同名字的Queue相当于是不同的队列,你要是发生消息的时候,你要注意你这个消息要往哪个队列中发送
        // 6.使用Session对象创建一个Producer对象
        MessageProducer producer = session.createProducer(queue);
        // 7.使用Producer对象发生消息
        TextMessage textMessage = new ActiveMQTextMessage();
        textMessage.setText("使用ActiceMQ 发送的队列消息");
        // TextMessage textMessage2 = session.createTextMessage("使用ActiceMQ 发送的队列消息");
        producer.send(textMessage);
        // 8.关闭资源
        producer.close();
        session.close();
        connection.close();
    }

}

我们运行上面的测试方法,执行成功后,我们到activemq的后台管理系统,点击”Queues”,可以看到我们刚才发送的那条消息”test-queue”。
这里写图片描述
接着我们点击”test-queue”,会看到如下图所示界面,可以看到刚才发送的那条消息的ID信息,Persistence(持久化)为永久保存,Priorty(优先级)为4,Redelivered(是否重复投递消息)为false,即不重复投递消息。
这里写图片描述
紧接着我们点击ID那一长串字符串,会看到如下图所示界面,我们在”Message Details”一栏,可以看到我们发送的消息信息。
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值