RabbitMQ学习第一记:用java连接RabbitMQ

1、什么是RabbitMQ

  MQ(Message Queue):消息队列,是服务端设计的一个可以存储大量消息的队列,并提供客户端操作队列的方法:生产队列(向队列中添加数据)、消费队列(从队列中取数据)。RabbitMQ就是基于消息队列的一个典型应用。RabbitMQ除了普通的生产消费功能,还有一些高级功能:公平分发 ,轮询分发,路由模式,通配符模式,发布订阅,队列持久化。

2、java实现RabbitMQ的连接

2.1、RabbitMQ客户端jar包

<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.0.2</version>
</dependency>

2.2、java连接RabbitMQ工具类

复制代码
public class ConnectionUtil
{
private static Logger logger = Logger.getLogger(ConnectionUtil.class);

public static Connection getConnection()
{
    try
    {
        Connection connection = null;
        //定义一个连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //设置服务端地址(域名地址/ip)
        factory.setHost("127.0.0.1");
        //设置服务器端口号
        factory.setPort(5672);
        //设置虚拟主机(相当于数据库中的库)
        factory.setVirtualHost("/");
        //设置用户名
        factory.setUsername("admin");
        //设置密码
        factory.setPassword("888888");
        connection = factory.newConnection();
        return connection;
    }
    catch (Exception e)
    {
        return null;
    }
}

}
复制代码
2.3、简单的生产者-消费者模式

  下图取自于官方网站(RabbitMQ)的生产消费模式的工作图

P:消息的生产者

C:消息的消费者

红色:队列

生产者将消息发送到队列,消费者从队列中获取消息。

2.4、生产者(Send)

复制代码
public class Send
{
//队列名称
private static final String QUEUE_NAME = "test_simple_queue";

public static void main(String[] args)
{
    try
    {
        //获取连接
        Connection connection = ConnectionUtil.getConnection();
        //从连接中获取一个通道
        Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "This is simple queue";
        //发送消息
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes("utf-8"));
        System.out.println("[send]:" + message);
        channel.close();
        connection.close();
    }
    catch (IOException | TimeoutException e)
    {
        e.printStackTrace();
    }
}

}

运行结果:
[send]:This is simple queue
复制代码
2.5、消费者(Receive)

复制代码
public class Receive
{
//队列名称
private static final String QUEUE_NAME = "test_simple_queue";

public static void main(String[] args)
{
    try
    {
        //获取连接
        Connection connection = ConnectionUtil.getConnection();
        //从连接中获取一个通道
        Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //定义消费者
        DefaultConsumer consumer = new DefaultConsumer(channel)
        {
            //当消息到达时执行回调方法
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
                    byte[] body) throws IOException
            {
                String message = new String(body, "utf-8");
                System.out.println("[Receive]:" + message);
            }
        };
        //监听队列
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
    catch (IOException | ShutdownSignalException | ConsumerCancelledException e)
    {
        e.printStackTrace();
    }
}

}

运行结果:
[Receive]:This is simple queue
复制代码
总结
简单的生产者-消费者模式实现了生产者向队列里生产数据,消费者启动后可以一直监听队列,不断的从队列里取出数据。

原文地址:http://blog.51cto.com/13954634/2172883

时间: 2024-08-10 16:06:56

RabbitMQ学习第一记:用java连接RabbitMQ的相关文章

Java连接RabbitMQ之创建连接

依赖包: 1 <dependencies> 2 <dependency> 3 <groupId>junit</groupId> 4 <artifactId>junit</artifactId> 5 <version>4.12</version> 6 <scope>test</scope> 7 </dependency> 8 9 <!-- https://mvnrepos

RabbitMQ的安装和使用Python连接RabbitMQ

绪论 这里的环境使用的是Mac OS X系统,所有的配置和使用都是基于Mac OS X 和Python 2.7 以及对应的pika库的. RabbitMQ的安装和配置 安装部分 #brew install rabbitmq 配置和启动 #sudo brew services start rabbitmq #sudo rabbitmqctl add_user admin admin "创建用户(username password)" #sudo rabbitmqctl set_user_

rabbitmq学习(四):利用rabbitmq实现远程rpc调用

一.rabbitmq实现rpc调用的原理 ·rabbitmq实现rpc的原理是:客户端向一个队列中发送消息,并注册一个回调的队列用于接收服务端返回的消息,该消息需要声明一个叫做correaltionId的属性,该属性将是该次请求的唯一标识.服务端在接受到消息(在需要时可以验证correaltionId)后,处理消息,并将消息发送到客户端注册的回调队列中.原理图如下: 二.代码实现 下面我们将模拟实现一个rpc客户端和rpc服务端.客户端给服务端发送message,服务端收到后处理message,

学习记录04 --- 使用java连接redis数据库进行操作

现在先简单的尝试下java如何连接上redis数据库 首先我们需要一个jedis.jar架包,我下载的是2.9.0的版本 附上下载地址,点击我下载 开始我们的常规操作,打开idea,导入架包,emmmmm,感觉这次会写的特别简短 先导包 import redis.clients.jedis.Jedis; 我们需要连接redis数据库的话,都是依赖于jedis对象而来的,我们先得new出一个jedis对象 //new一个Jedis对象,连接redis数据库 Jedis jedis = new Je

RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java实现RabbitMQ之与Spring集成 最后面有下载地址,只是做了少许改变,改变的代码如下: 消费者 spring-config.xml(还需要增加一个QueueListener监听器,代码就不复制到这里了,可以参考项目中的其他监听器) <!-- =========================

使用php-amqplib连接rabbitMQ 学习笔记及总结

1.使用composer安装php-amqplib 在你的项目中添加一个 composer.json文件: { "require": { "php-amqplib/php-amqplib": "2.6.*" } } 只要你已经安装Composer功能,你可以运行以下: $ composer install 已经存在的项目则执行 $ composer update这时在verdor目录就已经下载完毕 具体可以参考官方文档:https://githu

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

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

RabbitMQ学习(三).NET Client之Publish/Subscribe

3 Publish/Subscribe Sending messages to many consumers at once Python | Java | Ruby | PHP| C# 转载请注明出处:jiq?钦's technical Blog Publish/Subscribe (using the .NET Client) 前面的教程我们已经学习了如何创建工作队列,工作队列背后的假设是每一个任务都被准确地递送给一个worker进行处理.这里我们将介绍完全不同的模式,即一个消息可以递送给多

RabbitMQ学习之:(十)AMQP和RabbitMQ介绍 (转贴+我的评论)

From: http://www.infoq.com/cn/articles/AMQP-RabbitMQ 准备开始 高级消息队列协议(AMQP1)是一个异步消息传递所使用的应用层协议规范.作为线路层协议,而不是API(例如JMS2),AMQP客户端能够无视消息的来源任意发送和接受信息.现在,已经有相当一部分不同平台的服务器3和客户端可以投入使用4. AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具.因此,面向消息的中间件(MOM)系