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包
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.5.6.RELEASE</version>
</dependency>
</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;
}
}
创建生产者
public class Send {
private final static String QUEUE_NAME = "test_queue";
public static void main(String[] argv) throws Exception {
// 获取到连接以及mq通道
Connection connection = ConnectionUtil.getConnection();
// 从连接中创建通道
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();
}
}
创建消费者
public class Recv {
private final static String QUEUE_NAME = "test_queue";
public static void main(String[] argv) throws Exception {
// 获取到连接以及mq通道
Connection connection = ConnectionUtil.getConnection();
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 + "'");
}
}
}
debug的时候可以进入rmq的管理页面查看对于的连接数,频道,以及消息队列:




消费者接受到的消息:

对应的官网英文文档如下:
http://www.rabbitmq.com/getstarted.html
RabbitMQ 一二事 - 简单队列使用的更多相关文章
- RabbitMQ 一二事(2) - 工作队列使用
上篇文章讲了简单队列的使用,这其实就是RMQ给的demo,实际并没有什么用 本篇讲讲工作模式队列,也称之为任务队列 一个生产者发布了多条消息,消费者A可以接受消息,接受消息后该消息就消除,消费者B可以 ...
- RabbitMQ 一二事(5) - 通配符模式应用
之前的路由模式是通过key相等来匹配 而通配符,顾名思义,符合条件,则进行消息匹配发送 将路由键和某模式进行匹配.此时队列需要绑定要一个模式上. 符号“#”匹配一个或多个词,符号“*”匹配不多不少一个 ...
- RabbitMQ 一二事(3) - 订阅模式(微信公众号模式)的应用
之前讲的消费者互相可以把队列中的消息全部读取,但是不是读完整的所有信息 那么采用订阅模式就行,这就是微信公众号的模式, 比如10个人订阅了我的公众号"BeJavaGod",当我发送 ...
- RabbitMQ 一二事(4) - 路由模式介绍
路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...
- Rabbit简单队列模式
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/ ...
- Hadoop 一二事(1) - 简单介绍与杂谈
大数据大数据,身边很多朋友都在谈大数据,Big Data!!! 到底是什么,用来干嘛的,也很少有人说得出一二,那今天开始就简单说说这一二事吧 hadoop 的来源:是作者女儿的一个玩具 - 一只黄色的 ...
- RabbitMq 之简单队列
简单队列类似于我们的生产者,消费者, 一个生产者,对应一个消费者. 直接上代码: package com.j1.rabbitmq.simple; import com.j1.rabbitmq.util ...
- RabbitMQ (二) 简单队列
参考:https://blog.csdn.net/vbirdbest/article/details/78583480 简单队列的模型: P : 生产者,即 Producer C : 消费者,即 Co ...
- RabbitMQ学习笔记(2)----RabbitMQ简单队列(Hello World)的使用
1. 简单队列结构图 2. 引入依赖 pom.xml文件 <dependency> <groupId>com.rabbitmq</groupId> <arti ...
随机推荐
- Javascript的一种代码结构方式——插件式
上几周一直在做公司的webos的前端代码的重构,之中对javascript的代码进行了重构(之前的代码耦合严重.拓展.修改起来比较困难),这里总结一下当中使用的一种代码结构——插件式(听起来怎么像独孤 ...
- Arcengine实现创建网络数据集札记(三)
后记 下面给出项目中用到的自定义的封装类. AE许可初始化封装类: public class AELicenseChecker { private static volatile AELicenseC ...
- VCenter克隆虚拟机报错msg.snapshot.error-QUIESCINGERROR
参考文献: http://www.mrtechjunkie.com/error-occurred-taking-snapshot-msg-snapshot-error-quiescingerror/ ...
- UnityShader之固定管线Fixed Function Shader【Shader资料3】
Fixed function shader简介: 属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的情况.使用的是ShaderLab语言,语法与微软的FX files 或 ...
- NSDate,NSNumber,NSValue
NSDate #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleas ...
- iOS之UI--辉光动画
前言:学习来自YouXianMing老师的博客:<辉光UIView的category>以及YouXianMing老师的github源码:< GlowView > 而我个人 ...
- 关于Block Formatting Context--BFC和IE的hasLayout
转文请标明 --- 出处:穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为"块级格式 ...
- Python 虚拟环境:Virtualenv
安装sudo yum install python-virtualenv 使用方法 virtualenv [虚拟环境名称] 如,创建**ENV**的虚拟环境 virtualenv ENV 默认情况下, ...
- [Eclipse配置] Eclipse代码中显示空白字符(空格,TAB和回车)的方法
在代码页面点击右键进入 Preferences --> General --> Editors --> Text Editors. 在 Show whitespace charact ...
- android 5.X之使用Palette
这几天为了学些android5.0版本sdk的新特性,折腾了好久.AndroidStudio被我反复的安装又卸载又安装,在eclipse和AndroidStudio 之间来回折腾.没想到sdk升级到5 ...