RabbitMQ使用实践

RabbitMQ使用实践

参考网站:

http://blog.chinaunix.net/topic/surpershi/

http://blog.csdn.net/lwkcn/article/details/25086467

http://snoopyxdy.blog.163.com/blog/static/60117440201352615631930/

1、简介

MQ(Message Queue)消息队列,用于应用系统解耦、消息异步分发。

RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。

其优点如下。

1)Reliability-可靠性高。

2)Flexible Routing-路由灵活。

3)Clustering-支持集群。

4)Federation-支持互联。

5)Tracing-便于追踪。

本文档是关于RabbitMQ的安装与使用实践。

实践环境:Window7 x64系统。

2、Erlang安装

RabbitMQ由ERLANG实现,故需要安装Erlang。

1)下载Erlang

下载官网:http://www.erlang.org/download.html

实践安装版本:otp_win32_17.4.exe。

2)安装Erlang

运行Exe按照提示一路Next安装下来。

3)配置Erlang

本机安装目录:C:\Program Files (x86)\erl6.3。

环境变量Path中添加C:\Program Files (x86)\erl6.3\bin。

4)检测Erlang

命令行中输入erl命令可检测Erlang是否安装成功。

3、RabbitMQ安装

对应RabbitMQ的版本为V3.4.3。

1)下载RabbitMQ

对应官网:http://www.rabbitmq.com/download.html

下载安装包:rabbitmq-server-3.4.3.exe。

2)安装RabbitMQ

运行Exe,一路Next安装完毕。

3)安装完成查看

4、RabbitMQ启动

1)启动管理插件

运行RabbitMQ Command Prompt(sbin dir)。

输入rabbitmq-plugins enable rabbitmq_management,启动管理插件。

2)启动管理服务

运行RabbitMQ Service - start。

3)登录管理界面

浏览器输入:http://localhost:15672/#/。

用户名:guest,密码guest。

5、消息发送代码

示例代码采用Java,对应IDE为Eclipse。

Java需要用到RabbitMQ的jar包。

jar包下载地址:http://www.rabbitmq.com/java-client.html。

对应版本与Rabbit Server一致V3.4.3。

发送代码见Send.java。

import java.io.IOException;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;  

public class Send {
    private final static String QUEUE_NAME = "rabbit";

    public static void main(String[] args) throws IOException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "Hello Rabbit!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");

        channel.close();
        connection.close();
    }
}

运行结束结果。

打印出: [x] Sent ‘Hello Rabbit!‘。

进入管理界面,可以看到已经创建了一个名叫rabbit的消息队列,,消息Ready标志为1。

6、消息接受代码

对应程序代码Recv.java。

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;  

public class Reqv {
    private final static String QUEUE_NAME = "rabbit";

    public static void main(String[] argv) throws Exception {  

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(QUEUE_NAME, true, consumer);

        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            System.out.println(" [x] Received '" + message + "'");
        }
    }
}

运行结果,打印如下。

[x] Received ‘Hello Rabbit!‘

进入管理端界面查看,消息Ready标志为0。

7、总结

通过实践,感觉RabbitMQ简单易用,支持消息的异步发送,可以解耦两个强关联的应用系统。

时间: 2024-11-12 06:33:55

RabbitMQ使用实践的相关文章

Java 小记 — RabbitMQ 的实践与思考

前言 本篇随笔将汇总一些我对消息队列 RabbitMQ 的认识,顺便谈谈其在高并发和秒杀系统中的具体应用. 1. 预备示例 想了下,还是先抛出一个简单示例,随后再根据其具体应用场景进行扩展,我觉得这样表述条理更清晰些. RabbitConfig: @Configuration public class RabbitConfig { @Bean public Queue callQueue() { return new Queue(MQConstant.CALL); } } Client: @Co

RabbitMQ简单实践

###一.RabbitMQ的简介和安装 1.1 RabbitMQ的安装 到官网下载最新的安装包,和Erlang的安装包,我的安装包如下图 先安装Erlang,再安装RabbitMQ,一直点击下一步就可以了. 安装完成之后,我们需要启用管理功能,找到安装位置,进入到sbin文件夹,执行下列命令rabbitmq-plugins enable rabbitmq_management,如图: 启用成功后,打开http://localhost:15672即可进入管理页面,用户名和密码均为guest至此安装

后端开发实践系列之三——事件驱动架构(EDA)编码实践

在本系列的前两篇文章中,笔者分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构. 单纯地讲事件驱动架构(Event Driven Architecture, EDA),那是几十年前就出现了的话题:单纯地讲领域事件,那也是这些年被大量提及并讨论得快熟透了的软件用语.然而,就笔者的观察看,事件驱动架构远没有想象中那样普遍地被开发团队所接受.即便搞微服务的人都知道除了同步的HTTP还有异步的消息机制,即便搞DDD的人都知道领域事件是其中的一等公民,

RabbitMQ学习及实践2---介绍及简单Java实现

一,基本概念 MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息.MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品. RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协

RabbitMQ学习及实践3--SpringMVC实现

根据学习的RabbitMQ知识配了一个SpringMVC的实现.这是一个完整的工程,view的部分使用freeMarker,持久化操作是通过mybatis实现. 整个工程的目录结构如下: src下的相关包的解释: controller:控制器: domain:对应数据库的操作对象类: persistence:mybatis的持久化操作: util:相关工具类: msg.bean:消息类,定义及描述消息体: msg.convert:实现如何转化消息体为可接受的消息类: msg.process:处理

RabbitMQ实战:消息通信模式和最佳实践

本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记. 通过前2篇的介绍,了解了消息通信的主要元素和交互过程,以及如何运行和管理RabbitMQ,这篇将站在开发模式的角度理解「面向消息通信」带来的好处,以及在各种场景下的最佳实践. 通过介绍,你会了解到: 面向消息通信的好处 发后即忘模型 用RabbitMQ实现RPC 面向消息通信的好处 主要从异步状态思维.处理能力扩展性.集成复杂度方面,说明面向消息通信的好处. 异步状态思维 当将消息通信集成到应用程序时,开发模式将从同步模型

RabbitMQ实践体验

最近由于业务需要进行性能升级,将原来需要经过http进行数据交互的方式修改为消息队列的形式.于是原来的同步处理的方式变成了异步处理,在一定程度上提升我们系统的性能,不过debug的时候,不免哭了出来.因为每个环节都需要进行详细检查.对于RabbitMQ,我们知道,其是AMQP的一种代理服服务器,具有一套严格的通信方式,即在核心产品进行通信的各个方面几乎都采用了RPC(Remote Procedure Call, 远程过程调用)模式. AMQ与RabbitMQ进行交互 RabbitMQ通信时用到的

rabbitmq在艺龙业务系统中的实践

rabbitmq作为成熟的企业消息中间件,实现了应用程序间接口调用的解耦,提高系统的吞吐量. 下面介绍下rabbitmq的一些基本概念: message acknowledgment: 消息确认,解决消息确认问题,只有收到ack之后才能从消息系统中删除. message durability: 消 息持久化,当rabbitmq退出或崩溃后,会把queue中的消息持久化.但注意,RabbitMQ并不能百分之百保证消息一定不会丢失,因为为了提 升性能,RabbitMQ会把消息暂存在内存缓存中,直到达

NET下RabbitMQ实践[配置篇]

这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战.当然不排除加餐情况.  介绍: rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. RabbitMQ的官方站:http://www.rabbitmq.com/          AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),A