IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> RabbitMQ 从HlloWord 到 Goodbye Word Two -> 正文阅读

[大数据]RabbitMQ 从HlloWord 到 Goodbye Word Two

Work Queue

  1. Work Queue
    工作队列,入门时候的queue仅是一个消费者消费生产者提供的信息,如下图
    在这里插入图片描述
    但当生产者开始大量推送消息,而消费者的处理速度跟不上的时候,我们就需要多个消费者来进行消费了。因此出现了Work Queue。
    在这里插入图片描述
  2. 生产者代码
package com.mqTest.WorrkQueue;

import com.mqTest.utils.MqUtils;
import com.rabbitmq.client.Channel;
import org.apache.log4j.Logger;

/**
 * @author LinQi
 * @version 1.0
 * @date 2021/7/13 16:00
 */
public class Producer {
    private static final String QUEUE_NAME = "hello_work";

    private static Logger log = Logger.getLogger(Producer.class);

    public static void main(String[] args) {
        try {
            Channel channel = MqUtils.getChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, true, null);
            for (int i = 0; i < 10; i++) {
                String message ="第" + i + "条消息推送";
                channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
                log.info("message to other ok");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}

3.消费者1/2
1和2的代码相同,只是消费者名字不一样,在此只提供消费者1代码。

package com.mqTest.WorrkQueue;

import com.mqTest.utils.MqUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import org.apache.log4j.Logger;

/**
 * work queue
 * @author LinQi
 * @version 1.0
 * @date 2021/7/13 16:16
 */
public class Worker {

    private static final String QUEUE_NAME = "hello_work";

    private static Logger log = Logger.getLogger(Worker.class);

    public static void main(String[] args) {
        Channel client = MqUtils.getChannel();

        DeliverCallback deliverCallback = (consumerTag, message) -> {
            log.info("queue:" + consumerTag +", message:" + new String(message.getBody()));
        };

        CancelCallback cancelCallback = (consumerTag) -> {
            log.info(consumerTag + "is delete");
        };

        System.out.println("this is Worker1");
        try {
            client.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

  1. 测试结果
    启动生产者,和2个消费者。预期结果是轮流获取消息。

生产者

消费者1
消费者2

成功!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 21:59:58  更:2021-07-16 22:00:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:56:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码