安装过程略过,一搜一大把。

rabbitmq管理控制台:http://localhost:15672/   默认账户:guest/guest

RabbitMQ默认监听端口:5672

JAVA API地址:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.6.5/rabbitmq-java-client-javadoc-3.6.5/

引入rabbitmq-java-client-bin-3.6.5下的jar包:

简单的基本流程是:

生产者:

、连接到RabbitMQ
、获取channel
、声明exchange
、创建并发布消息
、关闭信道和连接

消费者:

、连接到RabbitMQ
、获取channel
、声明exchange
、声明Queue
、使用路由键将exchange和queue绑定
、消费消息
、关闭信道和连接

1、消息生产者SenderWithExchange.java

 package com.yzl.test1;

 import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; /**
* 使用交换器的生产者
* @author: yzl
* @date: 2016-10-16
*/
public class SenderWithExchange {
//路由键名称
private final static String ROUTING_KEY = "rk"; public static void main(String[] args) throws Exception {
//连接到rabbitmq服务器
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
//创建一个信道
Channel channel = connection.createChannel();
//声明direct类型的交换器
channel.exchangeDeclare("myDirectExchange","direct"); String msg = null;
for(int i=1; i<100; i++){
msg = "hello world" + i;
//发送消息给myDirectExchange交换器,并且路由键是rk
channel.basicPublish("myDirectExchange", ROUTING_KEY, null, msg.getBytes());
System.out.println("Sender send new msg:" + msg);
Thread.sleep(2000);
} //关闭信道
channel.close();
//关闭连接
connection.close();
}
}

2、消息消费者ReceiverWithExchange.java

 package com.yzl.test1;

 import java.io.IOException;

 import com.rabbitmq.client.AMQP.BasicProperties;
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; /**
* 消息消费者
* @author: yzl
* @date: 2016-10-16
*/
public class ReceiverWithExchange {
//消息队列名称
private final static String QUEUE_NAME = "hello";
//路由键名称
private final static String ROUTING_KEY = "rk";
/**
* @param args
*/
public static void main(String[] args) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//定义队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
//定义direct类型的交换器
channel.exchangeDeclare("myDirectExchange","direct");
//通过路由键 将 队列和交换器绑定起来
channel.queueBind(QUEUE_NAME, "myDirectExchange", ROUTING_KEY);
System.out.println("Receiver waiting to accept msg"); //消息消费处理器
Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body);
System.out.println("accept a new msg :" + msg);
}
};
//绑定消息处理器
channel.basicConsume(QUEUE_NAME, true, consumer);
} }

如果先运行SenderWithExchange后运行ReceiverWithExchange将会丢失一部分时间内的数据。反之则没问题,具体原因可以看RabbitMQ学习笔记2-理解消息通信

direct交换器是使用for循环的形式一个一个交替发给所有绑定的队列上去

RabbitMQ学习笔记1-hello world的更多相关文章

  1. RabbitMQ学习笔记(五) Topic

    更多的问题 Direct Exchange帮助我们解决了分类发布与订阅消息的问题,但是Direct Exchange的问题是,它所使用的routingKey是一个简单字符串,这决定了它只能按照一个条件 ...

  2. (转) Rabbitmq学习笔记

    详见原文: http://blog.csdn.net/shatty/article/details/9529463 Rabbitmq学习笔记

  3. 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群

    在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ...

  4. 官网英文版学习——RabbitMQ学习笔记(一)认识RabbitMQ

    鉴于目前中文的RabbitMQ教程很缺,本博主虽然买了一本rabbitMQ的书,遗憾的是该书的代码用的不是java语言,看起来也有些不爽,且网友们不同人学习所写不同,本博主看的有些地方不太理想,为此本 ...

  5. RabbitMQ学习笔记五:RabbitMQ之优先级消息队列

    RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...

  6. RabbitMQ学习笔记(六) RPC

    什么RPC? 这一段是从度娘摘抄的. RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的 ...

  7. 官网英文版学习——RabbitMQ学习笔记(八)Remote procedure call (RPC)

    在第四篇学习笔记中,我们学习了如何使用工作队列在多个工作者之间分配耗时的任务.   但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?这是另一回事.这种模式通常称为远程过程调用或RPC.   ...

  8. 官网英文版学习——RabbitMQ学习笔记(二)RabbitMQ安装

    一.安装RabbitMQ的依赖Erlang 要进行RabbitMQ学习,首先需要进行RabbitMQ服务的安装,安装我们可以根据官网指导进行http://www.rabbitmq.com/downlo ...

  9. RabbitMQ学习笔记一

    前 言 -解决问题  一.RabbitMQ安装  1.安装erlang 环境 a.下载erlang 版本,注意这里需要和安装的rabbitMq版本相配对,rabbitMQ官方网站上可以查到:https ...

随机推荐

  1. idea创建springcloud项目图文教程(EurekaServer注册中心)

    http://blog.csdn.net/hcmony/article/details/77854999 idea创建springcloud项目图文教程(EurekaServer注册中心)(六) 1, ...

  2. Can't create pdf file with font calibri bold 错误解决方案

    错误情况: %%[ ProductName: Distiller ]%% Mangal not found, using Courier. %%[ Error: invalidfont; Offend ...

  3. [转]IOS下如何判断机器是否越狱

    转自: http://blog.csdn.net/kaizi318/article/details/9135385 关于判断iPhone是否是jailbreak机器,可参考如下代码: static c ...

  4. android自己定义换行居中CenterTextView

    在我们开发app时,TextView一定是使用最多的控件了,android自带的TextView的功能也十分强大.但还是有些小的地方不能满足我们的需求.几天要说的这个功能也是开发中非经常见的.就是,在 ...

  5. cocos2d-js中Chipmunk物理引擎相关(1)

    近期看些cocos2d-js的东西.用到当中的Chipmunk的一些东西.由于相关的资料也不是非常具体,所以看到一些东西实用就记录下来. 1. chipmunk是cocos2d的一个一个物理引擎.用来 ...

  6. 数据库savepoint

    保存点(savepoint)是事务过程中的一个逻辑点,我们可以把事务回退到这个点,而不必回退整个事务. 语法 编辑 savepoint savepoint_name 这个命令就是在事务语句之间创建一个 ...

  7. 析构函数 (C++)

    最近发现自己对析构函数的认知有一定的问题,因为之前有在使用placement new时主动调用对象的析构函数,所以觉得析构函数只是个普通的成员函数,调用的时候只会执行自己方法体内的代码内容,而回收内存 ...

  8. 第二章 BIO与NIO

    <netty权威指南>读书笔记 一.BIO 1.服务端程序: package bio; import java.io.BufferedReader; import java.io.IOEx ...

  9. go语言之进阶篇方法的重写

    1.方法的重写 示例: //Person类型,实现了一个方法 func (tmp *Person) PrintInfo() { fmt.Printf("name=%s, sex=%c, ag ...

  10. android 框架层 常用类介绍

    名称 功能描述 示意图 activitymanager 管理应用程序的周期并提供常用的回退功能 window manager 窗口管理者 content provider 用于访问另一个的数据,或者共 ...