RabbitMQ 一二事 - 简单队列使用

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

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

时间: 2024-08-02 01:44:31

RabbitMQ 一二事 - 简单队列使用的相关文章

RabbitMQ 一二事(2) - 工作队列使用

上篇文章讲了简单队列的使用,这其实就是RMQ给的demo,实际并没有什么用 本篇讲讲工作模式队列,也称之为任务队列 一个生产者发布了多条消息,消费者A可以接受消息,接受消息后该消息就消除,消费者B可以接受其他消息 使用场景,一些数据库操作比较缓慢的话可以分别给多个接口调用,降低压力,或者抢单场景也能考虑, 比如就10个商品,100个消费者来抢单,前10个抢到了后,消息队列就为空了,那么第11个以后的所有消费者都不会抢到 代码示例: 生产者 1 public class Send { 2 3 pr

RabbitMQ 一二事(5) - 通配符模式应用

之前的路由模式是通过key相等来匹配 而通配符,顾名思义,符合条件,则进行消息匹配发送 将路由键和某模式进行匹配.此时队列需要绑定要一个模式上. 符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词. 因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs” 如图: 官网截图: 代码示例: 服务方 接收方1 接受方2 路由模式也是通配符模式的一种 在生产环境中,以通配符模式用的较多 当然简单应用的话路由模式也够了

RabbitMQ 一二事(3) - 订阅模式(微信公众号模式)的应用

之前讲的消费者互相可以把队列中的消息全部读取,但是不是读完整的所有信息 那么采用订阅模式就行,这就是微信公众号的模式, 比如10个人订阅了我的公众号"BeJavaGod",当我发送一条消息的时候, 那么这10个人都能收到我的消息并且查看,比如本条消息,对吧? 生产者制造消息发送给交换机X,而不是发送给队列,队列和交换机绑定,消费者从各自的队列中获得消息 这样则实现一个生产者发送的所有消息都能被所有的消费者同时接收到 需要注意的地方是,在生产者创建消息发送到交换机时,此时没有队列,那么消

RabbitMQ 一二事5 - 通配符模式应用

One-day-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-%E5%95%86%E5%93%81%E6%88%90%E4%BA%A4%E6%97%B6%E5%8F%91%E9%80%81%E7%9F%AD%E4%BF%A1 ?????O5EWtPoC?^?n?\????? ?????UqwQNtaE????????W?d ????HXzlPeEU4???v??h?? http://auto.315che.com/junjiecross/qa23864614.htm

RabbitMQ六种队列模式-简单队列模式

前言 RabbitMQ六种队列模式-简单队列 [本文]RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 在官网的教程中,描述了如上六类工作队列模式: 简单队列模式:最简单的工作队列,其中一个消息生产者,一个消息消费者,一个队列.也称为点对点模式 工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者.同样也称为点对点模式 发布/订阅模式:无选择接收消息,一个消息生产者,一个交换器,多个

第二百九十一节,RabbitMQ多设备消息队列

RabbitMQ多设备消息队列-安装与简介 RabbitMQ简介 解释RabbitMQ,就不得不提到AMQP(Advanced Message Queuing Protocol)协议. AMQP协议是一种基于网络的消息传输协议,它能够在应用或组织之间提供可靠的消息传输.RabbitMQ是该AMQP协议的一种实现,利用它,可以将消息安全可靠的从发 送方传输到接收方.简单的说,就是消息发送方利用RabbitMQ将信息安全的传递给接收方. RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息

RabbitMQ五:生产者--队列--多消费者

一.生成者-队列-多消费者(前言) 上篇文章,我们做了一个简单的Demo,一个生产者对应一个消费者,本篇文章就介绍 生产者-队列-多个消费者,下面简单示意图 P 生产者    C 消费者  中间队列 需求背景:工厂某部门需要生产n个零件,部门下面有2个小组,每个小组需要生产n/2个 公平派遣 每个小组的情况下,当所有奇怪的信息都很重,甚至信息很轻的时候,一个工作人员将不断忙碌,另一个工作人员几乎不会做任何工作.那么,RabbitMQ不知道什么,还会平均分配消息. 这是因为当消息进入队列时,Rab

【RabbitMQ】——5种队列(转)

原文地址:https://blog.csdn.net/u012654963/article/details/76417613 应用RabbitMQ,我们可以根据需求选择5种队列之一. 一.简单队列 P:消息的生产者 C:消息的消费者 红色:队列 简单队列的生产者和消费者关系一对一 但有时我们的需求,需要一个生产者,对应多个消费者,那就可以采用第二种模式 二.Work模式 一个生产者.2个消费者. 但MQ中一个消息只能被一个消费者获取.即消息要么被C1获取,要么被C2获取.这种模式适用于类似集群,

Rabbit简单队列模式

1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 2 <modelV