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学习——队列相关推荐

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

    上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一.理论: .net环境下,C#代码调用RabbitMQ消 ...

  2. JAVA03_21学习总结(RabbitMQ消息队列)

    今日内容 1. RabbitMQ 消息队列 Rabbitmq 消息队列基于AMQP协议的消息队列就是将本来一次性完成的,耗时的,需要等待的操作分离出来-形成一个单独的模块,就是消息队列-例子:普通方式 ...

  3. RabbitMQ学习总结 第一篇:理论篇

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  4. 【RabbitMQ】一文带你搞定RabbitMQ延迟队列

    本文口味:鱼香肉丝   预计阅读:10分钟 0|1一.说明 在上一篇中,介绍了RabbitMQ中的死信队列是什么,何时使用以及如何使用RabbitMQ的死信队列.相信通过上一篇的学习,对于死信队列已经 ...

  5. RabbitMQ六种队列模式-简单队列模式

    前言 RabbitMQ六种队列模式-简单队列 [本文] RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...

  6. RabbitMQ六种队列模式-工作队列模式

    前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 [本文] RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...

  7. RabbitMQ六种队列模式-发布订阅模式

    前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 [本文] RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...

  8. RabbitMQ六种队列模式-主题模式

    前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列模式-主题 ...

  9. rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列

    延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行. DLX + TTL 方式存在的时序问题 对于延迟队列不管是 AMQP 协议或者 RabbitMQ 本身是不支持的,之前有 ...

最新文章

  1. CreateStructuringElementEx
  2. redux学习笔记归纳
  3. OpenTsdb官方文档-----理解指标和时间序列
  4. ci框架mysql多条件_CI框架同时连接不同的数据库(或不同表前缀)
  5. linux摄像头内核驱动开发,FS_S5PC100平台上Linux Camera驱动开发详解(一)
  6. 计算机网络技术中的数据通信
  7. cpu上干硅脂怎么清理_笔记本电脑散热硅脂的正确涂法
  8. 网站缩略图在线生成PHP源码
  9. 会计基础第二次模拟题(3)
  10. HTML注释的表示方法,如何表示HTML注释
  11. 用 JAVA 开发游戏连连看(之四)添加更多的功能
  12. 交付自动化的探索与展望
  13. 数据库系统概论-绪论
  14. VB.net 2010下关联与程序图标设置
  15. findbug规则说明
  16. python 实现轨迹数据可视化
  17. java正则基本用法
  18. 表单工作流审核步骤抄送功能介绍
  19. docker_相关操作
  20. JAVA微信商城 有后台

热门文章

  1. 黑色背景下,计算照片白色的区域面积和周长
  2. 显卡测试软件毛毛虫,超龙超龙,与众不同,顶流配备,散热一流,3070Ti超龙旗舰版评测...
  3. 可以自动撑起的html样式,好好玩:CSS3抖动样式CSS Shake让你的网页酷炫起来
  4. C和汇编混合编程--------函数调用后ebp、esp值问题
  5. kafka数据不丢失不重复_超高速底层系统数据复制,安全精准不丢失
  6. 神牛笔记:吉林大学ACM总结(fennec)
  7. php显示时间,php实现用已经过去多长时间的方式显示时间
  8. 括号匹配问题(c和c++版本实现)
  9. 数据结构之单链表——C++模板类实现
  10. 组件化与插件化的差别在哪里?附面试题答案