简介:

Rabbitmq 是消息代理中间件,它接收或者发送消息。你可以把它想想宬一个邮局:当你把邮件放到邮箱时,你可以确定某一位邮递员可以准确的把邮件送到收件人手中,在这个比喻中,rabbitmq是一个邮箱,邮局及邮递员。
Rabbitmq和邮局的区别是,它不处理纸张,它接收,存储,转发二进制文件消息。
 

Rabbitmq 消息服务中几个术语。

  • 生产者:发送消息。消息的产生者。
  • 队列:在Rabbitmq内部,如同邮箱。尽管消息流转通过RabbitMq和你的应用,但是只被存储在对列里。对列只能绑定到主机内存并且磁盘限制,本质上是一个大的消息缓存。生产者发送消息到对列中,消费者从对列中接收数据。
  • 消费者:接收消息,大部分接收程序等待接收消息。
 

Hello world

Maven
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.</version>
</dependency> 
RabitMqConnectionConfig.java
package com.rabitmq.config;

import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory; public class RabitMqConnectionConfig { //MQ 连接地址
private static final String RABIT_MQ_HOST = "localhost"; private static final int RABIT_MQ_PORT = ; private static final String RABIT_MQ_USER_NAME = "guest"; private static final String RABIT_MQ_USER_PASSWD = "guest"; // private static final String RABIT_TEST_EXCHANGE = "test_exchange"; public static final String RABIT_TEST_QUEUE = "test_rabit_mq"; /**
* rabbitmq 连接器
* @return
* @throws IOException
* @throws TimeoutException
*/
public static Connection getConnection() throws IOException, TimeoutException {
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost(RABIT_MQ_HOST);
connectionFactory.setPort(RABIT_MQ_PORT);
connectionFactory.setUsername(RABIT_MQ_USER_NAME);
connectionFactory.setPassword(RABIT_MQ_USER_PASSWD);
return connectionFactory.newConnection();
} /**
*
* @param connection
* @throws IOException
*/
public static void closeConnection(Connection connection) throws IOException {
if(connection != null) {
connection.close();
}
}
}
RabitMqProducer.java
package com.rabitmq.producer;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabitmq.config.RabitMqConnectionConfig; public class RabitMqProducer { //发布者名称
private String producerName; public RabitMqProducer(String producerName) {
super();
this.producerName = producerName;
} public void send(String message) { Connection connection = null;
Channel channel = null;
try {
connection = RabitMqConnectionConfig.getConnection();
channel = connection.createChannel();
Map<String, Object> map = new HashMap<String, Object>();
map.put("x-queue-type", "classic");
channel.queueDeclare(RabitMqConnectionConfig.RABIT_TEST_QUEUE, true, false, false, map);
// channel.queueBind(RABIT_TEST_QUEUE, RABIT_TEST_EXCHANGE, "");
// String sendMessage = "producerName:" + this.producerName + ",message:"+message;
for (int i = ; i < ;i++) {
String sendMessage = "producerName:" + this.producerName + ",message:"+message + "----"+i;
channel.basicPublish("", RabitMqConnectionConfig.RABIT_TEST_QUEUE, null, sendMessage.getBytes("utf-8"));
System.out.println("sendMessage:["+ sendMessage +"]");
} } catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}finally {
if(channel != null) {
try {
channel.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
if(connection != null) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public static void main(String[] args) {
String message = "你好棒呀";
new RabitMqProducer("pro_aaa").send(message);
new RabitMqProducer("pro_bbb").send(message);
new RabitMqProducer("pro_ccc").send(message);
new RabitMqProducer("pro_ddd").send(message);
}
}
RabitMqConsumer.java
package com.rabitmq.consumer;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException; import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import com.rabitmq.config.RabitMqConnectionConfig; public class RabitMqConsumer { public RabitMqConsumer() { } public String receive(final String consumerName) {
System.out.println( consumerName + " receive start" );
Connection connection =null;
Channel channel = null;
try {
connection = RabitMqConnectionConfig.getConnection();
channel = connection.createChannel();
Map<String, Object> args = new HashMap<>();
args.put("x-queue-type", "classic");
channel.queueDeclare(RabitMqConnectionConfig.RABIT_TEST_QUEUE, true, false, false, args);
channel.basicConsume(RabitMqConnectionConfig.RABIT_TEST_QUEUE, true, new DeliverCallback() { @Override
public void handle(String consumerTag, Delivery message) throws IOException {
String messageStr = new String(message.getBody(),"utf-8");
System.out.println("consumerName :" + consumerName + " ,deliver call back" + consumerTag + ",message:" + messageStr);
}
}, new CancelCallback() { @Override
public void handle(String consumerTag) throws IOException {
System.out.println("consumerName :" + consumerName + " ,Cancel call back :" + consumerTag);
}
}); } catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}finally {
// if(channel != null) {
// try {
// channel.close();
// } catch (IOException e) {
// e.printStackTrace();
// } catch (TimeoutException e) {
// e.printStackTrace();
// }
// }
// if(connection != null) {
// try {
// connection.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// } } return "";
} public static void main(String[] args) {
new RabitMqConsumer().receive("consumer_aaa");
new RabitMqConsumer().receive("consumer_bbb");
new RabitMqConsumer().receive("consumer_ccc");
new RabitMqConsumer().receive("consumer_ddd");
}
}
 
 
 
 
 
 
 
 
 
 
 

RabbitMQ Hello world(二)的更多相关文章

  1. RabbitMQ学习系列二-C#代码发送消息

    RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...

  2. RabbitMQ官方教程二 Work Queues(GOLANG语言实现)

    RabbitMQ官方教程二 Work Queues(GOLANG语言实现) 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息. 在这一部分中,我们将创建一个工作队列,该队列将用于在多个wo ...

  3. RabbitMQ入门教程(二):简介和基本概念

    原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  4. rabbitMQ教程(二)一篇文章看懂rabbitMQ

    一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...

  5. 初识RabbitMQ系列之二:下载安装

    一:Erlang安装 因为RabbitMQ 是Erlang语言开发的,所以首先要装上Erlang的环境 1)下载Erlang    下载官网:http://www.erlang.org/downloa ...

  6. RabbitMQ 消息队列 二

    一:查看MQ的用户角色 rabbitmqctl list_users 二:添加新的角色,并授予权限 rabbitmqctl add_user xiaoyao 123456 rabbitmqctl se ...

  7. RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用

    深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...

  8. RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

    一.理论: .net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现. EasyNetQ 是一个易于使用的RabbitMQ的.Net客 ...

  9. rabbitmq学习(二):rabbitmq(消息队列)的作用以及rabbitmq之直连交换机

    前言 上篇介绍了AMQP的基本概念,组成及其与rabbitmq的关系.了解了这些东西后,下面我们开始学习rabbitmq(消息队列)的作用以及用java代码和rabbitmq通讯进行消息发布和接收.因 ...

  10. RabbitMQ指南之二:工作队列(Work Queues)

    在上一章的指南中,我们写了一个命名队列:生产者往该命名队列发送消息.消费从从该命名队列中消费消息.在本章中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务.工作队列(即任务队列)的主要思想 ...

随机推荐

  1. Java基础部分脑图

    这两天事情多,Java摸鱼了,就抽空写了一个脑图聊以自慰,表示自己还是学了的 下面这些全会了,恭喜你,Java的基础你可以毕业了

  2. 关于MySQL Notifiter的简单使用

    MySQL Notifiter是MySQL 数据库的辅助工具. 1.打开MySQL Notifiter Command Line Client,输入密码:123456(这是我自己的) 2.创建一个名为 ...

  3. 1006 Sign In and Sign Out (25 分)

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  4. 如何连接到Oracle数据库?

    如何连接到Oracle数据库?   使用SQL * Plus连接Oracle数据库服务器 SQL * Plus是交互式查询工具,我们在安装Oracle数据库服务器或客户端时会自动安装.SQL * Pl ...

  5. javascript中的constructor

    constructor,构造函数,对这个名字,我们都不陌生,constructor始终指向创建当前对象的构造函数. 这里有一点需要注意的是,每个函数都有一个prototype属性,这个prototyp ...

  6. windows上jmeter目录结构功能

    1.bin :存储了jmeter的可执行程序,如启动 2.lib:存储了jmeter的整合的功能(如.jar文件程序) 3.启动jmeter:双击bin\apachejmeter.jar jmeter ...

  7. 《深入理解 Java 虚拟机》读书笔记:垃圾收集器与内存分配策略

    正文 垃圾收集器关注的是 Java 堆和方法区,因为这部分内存的分配和回收是动态的.只有在程序处于运行期间时才能知道会创建哪些对象,也才能知道需要多少内存. 虚拟机栈和本地方法栈则不需要过多考虑回收的 ...

  8. pgsql中json格式数组查询结果变成了字符串

    场景复原 最近使用到了json的数组,用来存储多个文件的值,发现在连表查询的时候返回结果变成了字符串. { "id": "repl-placeholder-007&quo ...

  9. Docker php安装扩展步骤详解

    前言 此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来 ...

  10. ValidForm.js的使用注意点

    dataType的值不能为"", 否则会导致错误发生:Uncaught TypeError: Cannot read property '0' of null,http请求可以发送 ...