RabbitMQ 模拟实现【六】:程序模拟实现

文章目录

  • 模拟实现
    • 模拟消费者
    • 模拟生产者
    • 效果展示
  • 启动结果如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71841546ad8043f1bd51e4408df791de.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f6e3e72ff9a4483c978ec48e24f075c2.png)

模拟实现

模拟消费者

package com.example.demo.demo;import com.example.demo.common.Consumer;
import com.example.demo.common.MqException;
import com.example.demo.mqclient.Channel;
import com.example.demo.mqclient.Connection;
import com.example.demo.mqclient.ConnectionFactory;
import com.example.demo.mqsever.core.BasicProperties;
import com.example.demo.mqsever.core.ExchangeType;import java.io.IOException;/** 这个类表示一个消费者.* 通常这个类也应该是在一个独立的服务器中被执行*/
public class DemoConsumer {public static void main(String[] args) throws IOException, MqException, InterruptedException {System.out.println("启动消费者!");ConnectionFactory factory = new ConnectionFactory();factory.setHost("127.0.0.1");factory.setPort(9090);Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.exchangeDeclare("testExchange", ExchangeType.DIRECT, true, false, null);channel.queueDeclare("testQueue", true, false, false, null);channel.basicConsume("testQueue", true, new Consumer() {@Overridepublic void handleDelivery(String consumerTag, BasicProperties basicProperties, byte[] body) throws MqException, IOException {System.out.println("[消费数据] 开始!");System.out.println("consumerTag=" + consumerTag);System.out.println("basicProperties=" + basicProperties);String bodyString = new String(body, 0, body.length);System.out.println("body=" + bodyString);System.out.println("[消费数据] 结束!");}});// 由于消费者也不知道生产者要生产多少, 就在这里通过这个循环模拟一直等待消费.while (true) {Thread.sleep(500);}}
}

模拟生产者

package com.example.demo.demo;import com.example.demo.mqclient.Channel;
import com.example.demo.mqclient.Connection;
import com.example.demo.mqclient.ConnectionFactory;
import com.example.demo.mqsever.core.ExchangeType;import java.io.IOException;/** 这个类用来表示一个生产者.* 通常这是一个单独的服务器程序.*/
public class DemoProducer {public static void main(String[] args) throws IOException, InterruptedException {System.out.println("启动生产者");ConnectionFactory factory = new ConnectionFactory();factory.setHost("127.0.0.1");factory.setPort(9090);Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 创建交换机和队列channel.exchangeDeclare("testExchange", ExchangeType.DIRECT, true, false, null);channel.queueDeclare("testQueue", true, false, false, null);// 创建一个消息并发送byte[] body = "hello".getBytes();boolean ok = channel.basicPublish("testExchange", "testQueue", null, body);System.out.println("消息投递完成! ok=" + ok);Thread.sleep(500);channel.close();connection.close();}
}

效果展示

启动结果如下:
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539141.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Helm Chart部署最简SpringBoot到K8S(AWS EKS版)

目标 这里假设,我们已经基本会使用k8s的kubectl命令进行部署了,也已经会自己打docker镜像推送到AWS ECR上面去了。而且,已经在云上准备好了AWS ECR镜像库和AWS EKS的k8s集群了。 这个前提上面,我们今天使用Helm Chart项目准备k8s…

WPF —— TabControl、StackPanel 控件详解

1 TabControl简介 表示包含多个项的控件,这些项共享屏幕上的同一空间。 TabControl有助于最大程度地减少屏幕空间使用量,同时允许应用程序公开大量数据。 TabControl包含共享同一屏幕空间的多个 TabItem 对象。一次只能看到 TabControl 中的一个 Ta…

无人机自动返航算法实现与优化

一、引言 随着无人机技术的快速发展,其在航拍、农业、救援等领域的应用越来越广泛。在这些应用中,无人机的自动返航功能显得尤为重要。一旦无人机失去控制或与遥控器失去连接,自动返航算法能够确保无人机安全返回起飞点,避免损失和…

(008)Unity StateMachineBehaviour的坑

文章目录 StateMachineBehaviour同名函数的调用问题StateMachineBehaviour 的 OnState*、OnStateMachine* 的区别 StateMachineBehaviour同名函数的调用问题 1.如果脚本中,两个同名的函数都存在,那么两个函数都会被调用;如果只有其中一个同名…

探索编程新纪元:Code GeeX、Copilot与通义灵码的智能辅助之旅

在人工智能技术日新月异的今天,编程领域的革新也正以前所未有的速度推进。新一代的编程辅助工具,如Code GeeX、Copilot和通义灵码,正在重塑开发者的工作流程,提升编程效率,并推动编程教育的普及。本文将深入探讨这三款…

Outlook API发送邮件的方法?如何设置接口?

如何使用Outlook API发送电子邮件?怎么调用API接口? 为了满足更高级别的需求,我们可能需要通过编程的方式来操作Outlook,这时候,Outlook API就显得尤为重要了。那么,如何使用Outlook API发送邮件呢&#x…

Python Web开发记录 Day9:Django part3 用户管理

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、数据库准备2、用户列表3、新建用户4、编辑用…

阿里云国际放行DDoS高防回源IP

如果源站服务器上设置了IP白名单访问控制(如安全软件、安全组),由于设置了DDoS高防后,回源IP是高防回源IP段,您需要将DDoS高防的回源IP段的地址加入安全软件和安全组的白名单中,避免DDoS高防的回源流量被误…

Vue2 + node.js项目

1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …

Airtest-Selenium升级兼容Selenium 4.0,给你全新体验!

一、前言 在上期更新推文中提到,我们Airtest-Selenium更新到了1.0.6版本,新增支持Selenium4.0的语法,那么我们来看一下Airtest-Selenium更新后有什么新的内容吧~ 二、selenium 4.0有什么新功能 selenium4.0最主要的还是定位元素方法的更新…

Leet code 746 使用最小花费爬楼梯

解体思路:动态规划 首先理解题意:什么是到达楼顶,这楼顶是指数组cost最后一个元素的下一个位置 所以需要创建一个元素个数为cost.size()1的dp数组 然后记录到达每一个位置的最小花费 下标0 和 1位置是起点 到达 i 位置的最小花费这个i需要…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的零售柜商品检测软件(Python+PySide6界面+训练代码)

摘要:开发高效的零售柜商品识别系统对于智能零售领域的进步至关重要。本文深入介绍了如何运用深度学习技术开发此类系统,并分享了全套实现代码。系统采用了领先的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5进行了性能比较,呈现了诸如…