RabbitMQ 实战教程(一)
来源:互联网 发布:国家数据统计 编辑:程序博客网 时间:2024/06/06 04:35
MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。RabbitMQ是信息传输的中间者。本质上,他从生产者接收消息,转发这些消息给消费者。换句话说,RabbitMQ能够按根据你指定的规则进行消息转发、缓冲、和持久化。
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
常见术语
producer(生产者),consumer(消费者),broker(RabbitMQ服务)并不需要部署在同一台机器上,实际上在大多数实际的应用中,也不会部署在同一台机器上。
生产者(Producer)
一个发送消息的程序是一个producer(生产者)。
一般用下图表示生产者:
队列(Queue)
队列类似邮箱。依存于RabbitMQ内部。虽然消息通过RabbitMQ在你的应用中传递,但是它们只能存储在队列中。队列不受任何限制,可以存储任何数量的消息—本质上是一个无限制的缓存。不同的生产者可以通过同一个队列发送消息,此外,不同的消费者也可以从同一个队列上接收消息。
一般用下图表示队列:
消费者(Consumer)
消费者属于等待接收消息的程序。
一般使用下图表示消费者:
案例实战
准备工作
使用Maven进行管理
- <dependency>
- <groupId>com.rabbitmq</groupId>
- <artifactId>amqp-client</artifactId>
- <version>3.6.3</version>
- </dependency>
发送端
发送端,连接到RabbitMQ(此时服务需要启动),发送一条数据,然后退出。
- package com.lianggzone.rabbitmq.demo.helloworld;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- import com.rabbitmq.client.Channel;
- import com.rabbitmq.client.Connection;
- import com.rabbitmq.client.ConnectionFactory;
- public class Send {
- private final static String QUEUE_NAME = "hello";
- public static void main(String[] args) throws IOException, TimeoutException {
- // 创建连接
- ConnectionFactory factory = new ConnectionFactory();
- // 设置MabbitMQ, 主机ip或者主机名
- factory.setHost("localhost");
- // 创建一个连接
- Connection connection = factory.newConnection();
- // 创建一个通道
- Channel channel = connection.createChannel();
- // 指定一个队列
- channel.queueDeclare(QUEUE_NAME, false, false, false, null);
- // 发送消息
- String message = "Hello World!";
- channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
- System.out.println(" [x] Sent '" + message + "'");
- // 关闭频道和连接
- channel.close();
- connection.close();
- }
- }
接受端
接受端,不断等待服务器推送消息,然后在控制台输出。
- package com.lianggzone.rabbitmq.demo.helloworld;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- import com.rabbitmq.client.AMQP;
- import com.rabbitmq.client.Channel;
- import com.rabbitmq.client.Connection;
- import com.rabbitmq.client.ConnectionFactory;
- import com.rabbitmq.client.Consumer;
- import com.rabbitmq.client.DefaultConsumer;
- import com.rabbitmq.client.Envelope;
- public class Recv {
- private final static String QUEUE_NAME = "hello";
- public static void main(String[] args) throws IOException, TimeoutException {
- // 创建连接
- ConnectionFactory factory = new ConnectionFactory();
- // 设置MabbitMQ, 主机ip或者主机名
- factory.setHost("localhost");
- // 创建一个连接
- Connection connection = factory.newConnection();
- // 创建一个通道
- Channel channel = connection.createChannel();
- // 指定一个队列
- channel.queueDeclare(QUEUE_NAME, false, false, false, null);
- System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
- // 创建队列消费者
- Consumer consumer = new DefaultConsumer(channel) {
- @Override
- public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
- byte[] body) throws IOException {
- String message = new String(body, "UTF-8");
- System.out.println(" [x] Received '" + message + "'");
- }
- };
- channel.basicConsume(QUEUE_NAME, true, consumer);
- }
- }
0 0
- RabbitMQ 实战教程(一)
- RabbitMQ 实战教程(二) 工作队列
- RabbitMQ 实战教程(三) 发布/订阅
- RabbitMQ 实战教程(四) 路由
- RabbitMQ 实战教程(五) 主题
- RabbitMQ教程之php-amqplib(一)安装RabbitMQ
- RabbitMQ 教程一
- 消息中间件RabbitMQ-实战一
- rabbitmq 教程 一 hello world
- Rabbitmq教程翻译(一)introduction
- C#使用RabbitMQ教程【一】
- springboot+rabbitMq整合开发实战一
- SpringMVC详细示例实战教程(一)
- redis实战教程(一)-分布式锁
- RabbitMQ 官方NET教程(一)【介绍】
- RabbitMQ的PHP教程之入门 (一)
- RabbitMQ实战
- RabbitMQ实战
- Maven自动部署Tomcat错误排除
- Python 动态规划 解决0-1背包问题
- centos7安装samba
- 从源码角度深入理解iScroll中的snap选项的含义
- MySQL通过sql语句获取当前日期|时间|时间戳
- RabbitMQ 实战教程(一)
- nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
- JavaScript基础入门 封装DOM 连缀
- CNN的发展史
- [JAVA学习1]注解
- spring封装hbase的代码实现
- Grub2加密
- python 定时任务去检测服务器端口是否通
- 栈和队列面试题