RabbitMQ ddemo 费元星
http://blog.csdn.net/lmj623565791/article/details/37607165
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37607165
本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考。
“Hello world” of RabbitMQ
1、Windows下RabbitMQ的安装
下载Erlang,地址:http://www.erlang.org/download/otp_win32_R15B.exe ,双击安装即可(首先装)
下载RabbitMQ,地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.4/rabbitmq-server-3.3.4.exe ,双击安装即可
下载rabbit-client.jar ,Java代码时需要导入。地址:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.3.4/rabbitmq-java-client-bin-3.3.4.zip
安装完成后,在RabbitMQ的安装目录的sbin先会有:rabbitmq-server.bat
例如:
在cmd下:进入sbin目录,运行rabbitmq-server start
2、介绍
RabbitMQ 是信息传输的中间者。本质上,他从生产者(producers)接收消息,转发这些消息给消费者(consumers).换句话说,他能够按根据你指定的规则进行消息转发、缓冲、和持久化。
RabbitMQ 的一些常见的术语:
Producing意味着无非是发送。一个发送消息的程序是一个producer(生产者)。一般用下图表示Producer:
Queue(队列)类似邮箱。依存于RabbitMQ内部。虽然消息通过RabbitMQ在你的应用中传递,但是它们只能存储在queue中。队列不受任何限制,可以存储任何数量的消息—本质上是一个无限制的缓存。很多producers可以通过同一个队列发送消息,相同的很多consumers可以从同一个队列上接收消息。一般用下图表示队列:
Consuming(消费)类似于接收。consumer是基本属于等待接收消息的程序。一般使用下图表示Consumer:
注意:producer(生产者),consumer(消费者),broker(RabbitMQ服务)并不需要部署在同一台机器上,实际上在大多数实际的应用中,也不会部署在同一台机器上。
2、Java入门实例
一个producer发送消息,一个接收者接收消息,并在控制台打印出来。如下图:
发送端:Send.java 连接到RabbitMQ(此时服务需要启动),发送一条数据,然后退出。
- package com.zhy.rabbit._01;
- 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[] argv) throws java.io.IOException
- {
- /**
- * 创建连接连接到MabbitMQ
- */
- 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();
- }
- }
值得注意的是队列只会在它不存在的时候创建,多次声明并不会重复创建。信息的内容是字节数组,也就意味着你可以传递任何数据。
接收端:Recv.java 不断等待服务器推送消息,然后在控制台输出。
- package com.zhy.rabbit._01;
- import com.rabbitmq.client.Channel;
- import com.rabbitmq.client.Connection;
- import com.rabbitmq.client.ConnectionFactory;
- import com.rabbitmq.client.QueueingConsumer;
- public class Recv
- {
- //队列名称
- private final static String QUEUE_NAME = "hello";
- public static void main(String[] argv) throws java.io.IOException,
- java.lang.InterruptedException
- {
- //打开连接和创建频道,与发送端一样
- ConnectionFactory factory = new ConnectionFactory();
- 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");
- //创建队列消费者
- QueueingConsumer consumer = new QueueingConsumer(channel);
- //指定消费队列
- channel.basicConsume(QUEUE_NAME, true, consumer);
- while (true)
- {
- //nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)
- QueueingConsumer.Delivery delivery = consumer.nextDelivery();
- String message = new String(delivery.getBody());
- System.out.println(" [x] Received '" + message + "'");
- }
- }
- }
分别运行Send.java和Recv.java 顺序无所谓。前提RabbitMQ服务开启。
运行结果:
[x]Sent 'hello world!'
----------------------------------------
[*] Waiting for messages. To exitpress CTRL+C
[x] Received 'hello world!'
RabbitMQ ddemo 费元星的更多相关文章
- java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-[费元星Q9715234] 说明如下,不懂的问题直接我[费元星Q9715234] 1.反射的意义在于不将xml tag ...
- 【shell mysql 导出数据到csv脚本,完美解决乱码转义符等问题】-费元星
#!/bin/bash#@author:feiyuanxing [既然笨到家,就要努力到家]#@date:2017-12-05#@E-Mail:feiyuanxing@gmail.com#@TARGE ...
- 【Linux搭建创建FTP服务器】---完美解决 - 费元星
配置大红字文件置顶: vsftp d.conf 4.5KB useradd -d /home/bai_du -s /sbin/nologin bai_du 修改访问权限: usermod ...
- 【原创】linux命令-Axel命令 - linux多线程下载 - 费元星 - 未来星开发团队
[费元星版权Q:9715234] Axel 是 Linux 下一个不错的HTTP/FTP高速下载工具.支持多线程下载.断点续[费元星版权Q:9715234]传,且可以从多个地址或者从一个地址的多个连接 ...
- 【vps搬家】--总结--费元星
20150310 费元星 稍微玩VPS/服务器比较久的站长手中应该不止一台VPS,我们会有多台机器之间的相互使用.比如可能会遇到的是数据传输,我们传统的做法是先用FTP下载数据A到本地,然后再到本地 ...
- 虚拟机安装win7 64位-完美解决-费元星
安装虚拟机是为了安装一个oracle ,在本机安装 ,本机会卡死,不是每次启动电脑都用oralce,而且有时候服务是关不干净的,所以安装在虚拟机里,需要的时候在开启,特做此记录! 费元星版权Q[971 ...
- 【原创】java 获取十个工作日之前或之后的日期(算当天)-完美解决-费元星
[原创]java 获取十个工作日之后的日期(算当天)-完美解决-费元星(仅考虑星期六星期天) /** * * 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期 * @param s ...
- MyEclipse10安装checkStyle与findBugs插件--详细完美结局-费元星
本人QQ:971751392(屌丝一枚) Myeclipse10安装checkStyle与findBugs插件详细完美结局方案: 资源一: http://download.csdn.net/detai ...
- nohup 重定向的问题-- 费元星 站长
费元星 大牛 以前只知道使用nohup可以让一个程序后台执行,但是生成的日志文件都放到nohup.out中了,不能自己指定,尤其是在同一个目录下我需要让两个甚至多个程序都要后台执行时,这样看日志就比较 ...
随机推荐
- Type Syntax error, insert ")" to complete Expression
今天倒持了 几个小时! 愣是 没有明确 ,为什么我的JSP的第一行没有代码? 还是报错! 错误是: Description Resource Path Location Type Sy ...
- Blog 使用Jsoup解析出html中的img元素
Jsoup主页:http://jsoup.org/ 在Blog.java 加入 private List<String> imageList=new LinkedList<Strin ...
- linnx 修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0 [编辑网卡的配置文件] 输入上述命令后回车,打开配置文件,使用方向键移动光标到最后一行,按字母键“i”,进入编 ...
- File,FileInfo,Directory,DirectoryInfo
两者的共同点: 一:都用于典型的操作,如复制.移动.重命名.创建.打开.删除和追加到文件 二:默认情况下,将向所有用户授予对新文件的完全读/写访问权限. 两者的区别: File类是静态类, ...
- 【洛谷P2746】[USACO5.3]校园网Network of Schools
校园网Network of Schools 第一问:Tarjan缩点,搞出每一个连通块,入度为零的连通块是需要必须接受新软件副本的,统计数量即可 第二问:要让整个图构成一个环,显然要将入度为零点和出度 ...
- 【SQL SERVER学习笔记】Sqlserver游标的尝试
DECLARE @ProName NVARCHAR(50)DECLARE @CityName NVARCHAR(50)DECLARE @ProId INT DECLARE @CityId INT DE ...
- PL/SQL知识点
1.ROW_NUMBER() OVER(PARTITION BY XXX ORDER BY XXX) SELECT STP.FLOW_INST_ID, BUU.USER_NAME, ORGG.NAME ...
- UICollectionViewCell的设置间距
UICollectionViewCell的设置间距 #pragma mark - UICollectionView 大小(宽高,平均一行三个) - (CGSize)collectionView:(UI ...
- c#实现的udt
不多说,当前具备基本通信,是从java版本转换过来的.可以参阅. 项目地址 https://github.com/jinyuttt/netudt.git
- c# 分布式系统开发
开篇吹牛,吹大牛了各位. 接连几篇博文,已经将了我们系统常用的东西,主要针对服务端,非桌面系统. 聊了这么久了,最后将这所有内容打包,完成一个系统.可能称为组件才合适,因为我没有提供启动程序. 每一个 ...