RabbitMQ 一二事 - 简单队列使用

简介: 消息队列目前流行的有三种 1. RabbitMQ 2. ActiveMQ 3. Kafka 这三种都非常强大,RabbitMQ目前用的比较多,也比较流行,阿里也在用 ActiveMQ是阿帕奇出品,但是性能上和RMQ相比相对差一些 卡夫卡呢,使用场景不同,不多介绍,主要是用于日志收集方面,结合hadoop非常灵活   RabbitMQ官网:http://www.

消息队列目前流行的有三种

1. RabbitMQ

2. ActiveMQ

3. Kafka

这三种都非常强大,RabbitMQ目前用的比较多,也比较流行,阿里也在用

ActiveMQ是阿帕奇出品,但是性能上和RMQ相比相对差一些

卡夫卡呢,使用场景不同,不多介绍,主要是用于日志收集方面,结合hadoop非常灵活

 

RabbitMQ官网:http://www.rabbitmq.com/

安装不多说了,可以下载Windows版本,或者linux版本 下载页面:http://www.rabbitmq.com/download.html

我在linux虚拟机上安装的,安装步骤简单,rpm直接安装就行,步骤就略了 

成功后可以看到如下页面:

 

简答队列图

pom方面需要引入如下jar包

 1 <dependencies>
 2     
 3         <dependency>
 4             <groupId>com.rabbitmq</groupId>
 5             <artifactId>amqp-client</artifactId>
 6             <version>3.4.1</version>
 7         </dependency>
 8         
 9         <dependency>
10             <groupId>org.slf4j</groupId>
11             <artifactId>slf4j-log4j12</artifactId>
12             <version>1.7.7</version>
13         </dependency>
14         
15         <dependency>
16             <groupId>org.apache.commons</groupId>
17             <artifactId>commons-lang3</artifactId>
18             <version>3.3.2</version>
19         </dependency>
20         
21         <dependency>
22             <groupId>org.springframework.amqp</groupId>
23             <artifactId>spring-rabbit</artifactId>
24             <version>1.5.6.RELEASE</version>
25         </dependency>
26         
27     </dependencies>

定义一个类似连接池的类

public class ConnectionUtil {

    public static Connection getConnection() throws Exception {
        // 定义连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置服务地址
        factory.setHost("192.168.1.205");
        // 端口
        factory.setPort(5672);
        // 设置账号信息,用户名、密码、vhost
        factory.setVirtualHost("lee-shop");
        factory.setUsername("lee");
        factory.setPassword("lee");
        // 通过工程获取连接
        Connection connection = factory.newConnection();
        return connection;
    }

}

创建生产者

 1 public class Send {
 2 
 3     private final static String QUEUE_NAME = "test_queue";
 4 
 5     public static void main(String[] argv) throws Exception {
 6         // 获取到连接以及mq通道
 7         Connection connection = ConnectionUtil.getConnection();
 8         // 从连接中创建通道
 9         Channel channel = connection.createChannel();
10 
11         // 声明(创建)队列
12         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
13 
14         // 消息内容
15         String message = "Hello World!";
16         channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
17         System.out.println(" [x] Sent '" + message + "'");
18 
19         // 关闭通道和连接
20         channel.close();
21         connection.close();
22     }
23 }

创建消费者

 1 public class Recv {
 2 
 3     private final static String QUEUE_NAME = "test_queue";
 4 
 5     public static void main(String[] argv) throws Exception {
 6 
 7         // 获取到连接以及mq通道
 8         Connection connection = ConnectionUtil.getConnection();
 9         Channel channel = connection.createChannel();
10 
11         // 声明队列
12         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
13 
14         // 定义队列的消费者
15         QueueingConsumer consumer = new QueueingConsumer(channel);
16         // 监听队列
17         channel.basicConsume(QUEUE_NAME, true, consumer);
18 
19         // 获取消息
20         while (true) {
21             QueueingConsumer.Delivery delivery = consumer.nextDelivery();
22             String message = new String(delivery.getBody());
23             System.out.println(" [x] Received '" + message + "'");
24         }
25     }
26 }

debug的时候可以进入rmq的管理页面查看对于的连接数,频道,以及消息队列:

消费者接受到的消息:

 

对应的官网英文文档如下:

http://www.rabbitmq.com/getstarted.html

 

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8月前
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
SpringBoot实现RabbitMQ的简单队列(SpringAMQP 实现简单队列)
62 1
|
3月前
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
229 6
|
4月前
|
消息中间件 JSON Java
|
4月前
|
消息中间件
rabbitmq,&队列
rabbitmq,&队列
|
5月前
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
146 2
|
4月前
|
消息中间件 JSON Java
玩转RabbitMQ声明队列交换机、消息转换器
玩转RabbitMQ声明队列交换机、消息转换器
107 0
|
6月前
|
消息中间件 RocketMQ
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
MetaQ/RocketMQ 原理问题之当消费集群规模较大时,处理分配不到队列的Consumer的问题如何解决
|
6月前
|
消息中间件 Java Kafka
说说RabbitMQ延迟队列实现原理?
说说RabbitMQ延迟队列实现原理?
93 0
说说RabbitMQ延迟队列实现原理?
|
6月前
|
消息中间件 NoSQL 关系型数据库
【RocketMQ系列十三】RocketMQ的集群核心概念之消费重试&死信队列&幂等消息的出现以及处理
【RocketMQ系列十三】RocketMQ的集群核心概念之消费重试&死信队列&幂等消息的出现以及处理
175 1
|
7月前
|
消息中间件 存储 监控
RabbitMQ 死信队列
RabbitMQ的死信队列(DLQ)是存储无法正常消费消息的特殊队列,常见于消息被拒绝、过期或队列满时。DLQ用于异常处理、任务调度和监控,通过绑定到普通队列自动路由死信消息。通过监听死信队列,可以对异常消息进行补偿和进一步处理,提升系统稳定性和可维护性。
122 1