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)
在上一章的指南中,我们写了一个命名队列:生产者往该命名队列发送消息.消费从从该命名队列中消费消息.在本章中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务.工作队列(即任务队列)的主要思想 ...
随机推荐
- Codeforces 631 (Div. 2) E. Drazil Likes Heap 贪心
https://codeforces.com/contest/1330/problem/E 有一个高度为h的大顶堆:有2h -1个不同的正整数,下标从1到2h−1,1<i<2h, a[i] ...
- .net core系统跨平台部署手册
前言 .net core跨平台版本基于.net core 3.1 SDK开发,剥离原来的基于MS Office进行文档转换功能的模块,使用基于开源跨平台的LibreOffice进行文档转换的模块.以此 ...
- F - 我们什么时候能见面? POJ - 2028
F - 我们什么时候能见面? POJ - 2028 ICPC委员会希望尽快召开会议,解决下一届比赛中的每一个小问题.然而,委员会的成员都忙于疯狂地开发(可能是无用的)程序,以至于很难安排他们的会议日程 ...
- Redis 练习(一)
来自<Redis 实战>第一章 对于 Redis 数据结构类型及使用不太清楚的可以参考 此链接 需求: 网站需要根据文章的发布时间和文章获得的投票数量计算出一个评分,然后按照这个评分来决定 ...
- thinkphp中array_diff运行无效 Invalid opcode 153/1/8
经本人查证,发现是thinkPHP优化导致的与array_diff冲突.thinkPHP 报的错:Invalid opcode 153/1/8.有谁知道原理的,说说,让俺也明白.
- flask-url_for
flask-url_for flask的url_for函数和django的reverse函数类似,都是提供视图反转url的方法 from flask import Flask, url_for app ...
- python3的subprocess的各个方法的区别(-)
subprocess(python3.7) subprocess 主要是为了替换一下的模块函数,允许你执行一些命令,并获取返回的状态码和 输入,输出和错误信息. os.systemos.spawn* ...
- Array(数组)对象-->reverse() 方法
1.定义和用法 reverse() 方法用于颠倒数组中元素的顺序:倒序. 语法: array.reverse() 举例: var arr = [1,2,3,4,5]; console.log(arr. ...
- P1352 没有上司的舞会&&树形DP入门
https://www.luogu.com.cn/problem/P1352 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的 ...
- tomcat通过tomcat 安装根目录下的conf-Catalina-localhost目录发布项目详解
tomcat通过conf-Catalina-localhost目录发布项目详解 Tomcat发布项目的方式大致有三种,但小菜认为通过在tomcat的conf/Catalina/localhost目 ...