RabbitMQ Hello world(二)
简介:
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(二)的更多相关文章
- RabbitMQ学习系列二-C#代码发送消息
RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...
- RabbitMQ官方教程二 Work Queues(GOLANG语言实现)
RabbitMQ官方教程二 Work Queues(GOLANG语言实现) 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息. 在这一部分中,我们将创建一个工作队列,该队列将用于在多个wo ...
- RabbitMQ入门教程(二):简介和基本概念
原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...
- rabbitMQ教程(二)一篇文章看懂rabbitMQ
一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...
- 初识RabbitMQ系列之二:下载安装
一:Erlang安装 因为RabbitMQ 是Erlang语言开发的,所以首先要装上Erlang的环境 1)下载Erlang 下载官网:http://www.erlang.org/downloa ...
- RabbitMQ 消息队列 二
一:查看MQ的用户角色 rabbitmqctl list_users 二:添加新的角色,并授予权限 rabbitmqctl add_user xiaoyao 123456 rabbitmqctl se ...
- RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用
深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
一.理论: .net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现. EasyNetQ 是一个易于使用的RabbitMQ的.Net客 ...
- rabbitmq学习(二):rabbitmq(消息队列)的作用以及rabbitmq之直连交换机
前言 上篇介绍了AMQP的基本概念,组成及其与rabbitmq的关系.了解了这些东西后,下面我们开始学习rabbitmq(消息队列)的作用以及用java代码和rabbitmq通讯进行消息发布和接收.因 ...
- RabbitMQ指南之二:工作队列(Work Queues)
在上一章的指南中,我们写了一个命名队列:生产者往该命名队列发送消息.消费从从该命名队列中消费消息.在本章中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务.工作队列(即任务队列)的主要思想 ...
随机推荐
- Chart控件的使用
1.开启滚动条(ScaleView.Size除以Interval ,大概是中间出现纵线的数量,一般动ScaleView.Size) chart1.ChartAreas[0].CursorX.AutoS ...
- 操作系统-IO与显示器
1. 让外设工作起来 只要给相应的控制器中的寄存器发一个指令 向设备控制器的寄存器写不就可以了吗? 需要查寄存器地址.内容的格式和语义.操作系统需要给用户提供一个简单视图---文件视图,这样方便 总的 ...
- P1250 种树(差分约束 / 贪心)
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1-N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E,T ...
- 关于C#三层架构增删改查中的“修改”问题
先来一个界面图: DAO中的方法: 这里需要获得数据的ID,进而进行操作. 之后是代码的实现: 修改的功能中需要注意的是:根据项目具体需要来判断修改的内容. 希望对您有所帮助!
- 浅谈Python导入外部文件
import 和 from ... import * 有什么区别? 例如我写了个模块hello.py def print_func(args): print("Hello " + ...
- 安装一个KVM服务器
安装一个KVM服务器 案例1:安装一个KVM服务器 案例2:KVM平台构建及 ...
- 搭建环境-Eclipse配置Tomcat创建Servlet总结
Descripton:Web开发:Eclipse的下载与安装,Tomcat下载和结合Eclipse的使用,Eclipse使用Servlet[记录下总结下] 一.Eclipse的下载与安装 下载地址 注 ...
- lr集合点
集合点:rendezvous point =====>>loadrunner的虚拟用户中,并发concurrent\ 同时simultaneous的区别: concurrent并发:指虚拟 ...
- 虚拟机安装windows sever2008
1.打开并进行新建虚拟机 2.默认选择“典型” 3.选择“安装程序盘映像文件”,并‘浏览’选择本地的文件 4. 5.后面的默认选择即可,安装路径可自己修改 6.这一步的磁盘大小可自己修改的,这里先预设 ...
- 1年左右的Java开发经验面试者的心得
面试,相信只要踏入这行业的人都会经历,不同的公司有不同的面试流程,但是综合起来,其实还是大体一致的!只有不断的总结自己的面试经历,得出自己的技术不足点,才能更好的去查缺补漏,从而更加自信的进行面试找到 ...