rabbitmq学习——队列
public class Send {
public static final String routingKey = "wuqidi_task_durable";
/*工作队列 也叫任务队列 目的是将任务发送到队列中 由工作者进行处理 在后台的多个工作者中 任务是共享的*/
public static void main(String[] args) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
//消息持久化 :在声明队列过程中 第二个参数 是设置持久化 这是为了 当rabbitmq崩溃 关闭
//消息和队列是否删除 也就是再次开机会不会保留原来信息和队列
//这里设置为true是保证队列不会消失
channel.queueDeclare(routingKey, true, false, false, null);
String con = getTask();
System.out.println(con);
//这里设置的是保证消息不会消失 但也不是完全保证 可能会在内存中
channel.basicPublish("", routingKey, MessageProperties.PERSISTENT_TEXT_PLAIN, con.getBytes());
channel.close();
connection.close();
}
/*在这里随机生成 task 个数*/
private static String getTask(){
Random r = new Random();
int len = r.nextInt(10);
StringBuffer sb = new StringBuffer();
for(int i=0; i< 15; i++){
sb.append("task ");
}
if(sb.length()<1){
sb.append("task");
}
return sb.substring(0, sb.length()-1).toString();
}
}
/*循环队列 使用工作队列的一个优点就是可以启动多个接收端 就是工作者,它可以并行工作。采用轮训的方式进行分配任务。*/
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.queueDeclare(Send.routingKey, true, false, false, null);
//公平调度:
//在同一时刻 发给同一工作者不准超过1条任务,直到处理完消息作出相应。可以先发送给空闲的工作者。
channel.basicQos(1);
Consumer callback = new Consumer() {
@Override
public void handleShutdownSignal(String consumerTag,
ShutdownSignalException sig) {
}
@Override
public void handleRecoverOk(String consumerTag) {
}
@Override
public void handleDelivery(String arg0, Envelope arg1,
BasicProperties arg2, byte[] arg3) throws IOException {
String tasks = new String(arg3, "utf-8");
String[] taskss = tasks.split(" ");
for(String tem : taskss){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(tem);
}
//这里执行消息确认 ,为的是待任务执行完毕后才能执行删除操作,如果任务执行过程中
//任务执行失败了 rabbitmq还可以链接其他工作者 进行工作
channel.basicAck(arg1.getDeliveryTag(), false);
}
@Override
public void handleConsumeOk(String consumerTag) {
}
@Override
public void handleCancelOk(String consumerTag) {
}
@Override
public void handleCancel(String consumerTag) throws IOException {
}
};
channel.basicConsume(Send.routingKey, false, callback);
channel.close();
connection.close();
}
}
在实际项目中目前我还没有用到。。。
转载于:https://www.cnblogs.com/core404/p/7644904.html
rabbitmq学习——队列相关推荐
- RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一.理论: .net环境下,C#代码调用RabbitMQ消 ...
- JAVA03_21学习总结(RabbitMQ消息队列)
今日内容 1. RabbitMQ 消息队列 Rabbitmq 消息队列基于AMQP协议的消息队列就是将本来一次性完成的,耗时的,需要等待的操作分离出来-形成一个单独的模块,就是消息队列-例子:普通方式 ...
- RabbitMQ学习总结 第一篇:理论篇
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- 【RabbitMQ】一文带你搞定RabbitMQ延迟队列
本文口味:鱼香肉丝 预计阅读:10分钟 0|1一.说明 在上一篇中,介绍了RabbitMQ中的死信队列是什么,何时使用以及如何使用RabbitMQ的死信队列.相信通过上一篇的学习,对于死信队列已经 ...
- RabbitMQ六种队列模式-简单队列模式
前言 RabbitMQ六种队列模式-简单队列 [本文] RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...
- RabbitMQ六种队列模式-工作队列模式
前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 [本文] RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...
- RabbitMQ六种队列模式-发布订阅模式
前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 [本文] RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...
- RabbitMQ六种队列模式-主题模式
前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题 ...
- rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列
延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行. DLX + TTL 方式存在的时序问题 对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有 ...
最新文章
- CreateStructuringElementEx
- redux学习笔记归纳
- OpenTsdb官方文档-----理解指标和时间序列
- ci框架mysql多条件_CI框架同时连接不同的数据库(或不同表前缀)
- linux摄像头内核驱动开发,FS_S5PC100平台上Linux Camera驱动开发详解(一)
- 计算机网络技术中的数据通信
- cpu上干硅脂怎么清理_笔记本电脑散热硅脂的正确涂法
- 网站缩略图在线生成PHP源码
- 会计基础第二次模拟题(3)
- HTML注释的表示方法,如何表示HTML注释
- 用 JAVA 开发游戏连连看(之四)添加更多的功能
- 交付自动化的探索与展望
- 数据库系统概论-绪论
- VB.net 2010下关联与程序图标设置
- findbug规则说明
- python 实现轨迹数据可视化
- java正则基本用法
- 表单工作流审核步骤抄送功能介绍
- docker_相关操作
- JAVA微信商城 有后台
热门文章
- 黑色背景下,计算照片白色的区域面积和周长
- 显卡测试软件毛毛虫,超龙超龙,与众不同,顶流配备,散热一流,3070Ti超龙旗舰版评测...
- 可以自动撑起的html样式,好好玩:CSS3抖动样式CSS Shake让你的网页酷炫起来
- C和汇编混合编程--------函数调用后ebp、esp值问题
- kafka数据不丢失不重复_超高速底层系统数据复制,安全精准不丢失
- 神牛笔记:吉林大学ACM总结(fennec)
- php显示时间,php实现用已经过去多长时间的方式显示时间
- 括号匹配问题(c和c++版本实现)
- 数据结构之单链表——C++模板类实现
- 组件化与插件化的差别在哪里?附面试题答案