RabbitMQ 模拟实现【五】:网络通信设计

文章目录

  • 网络通信设计
    • 基于 TCP 自定义应用层协议
    • channel参数
    • 服务器实现
    • 客户端实现

网络通信设计

基于 TCP 自定义应用层协议

在这里插入图片描述

  • Type 希望客户端能远程调用服务器的核心API,type就是描述调用哪一个API的
  • Length 表示接下来的Payload的长度
  • Payload 是真正需要用到的数据.
    Type表示请求响应不同功能,取值如下:
  • 0x1 创建channel
  • 0x2 关闭channel
  • 0x3 创建 exchange
  • 0x4 销毁 exchange
  • 0x5 创建 queue
  • 0x6 销毁 queue
  • 0x7 创建 binding
  • 0x8 销毁 binding
  • 0x9 发送 message
  • 0xa 订阅 message
  • 0xb 返回 ack(手动应答消息)
  • 0xc 服务器给客户端推送消息(自动推送消息的独有响应)

channel参数

  • ⼀个客户端可以有多个模块。每个模块都可以和 brokerserver 之间建⽴”逻辑上的连接“ (channel)
    这⼏个模块的 channel 彼此之间是相互不影响的但是这⼏个 channel 复⽤了同⼀个 TCP 连接
  • channel 其实只是咱们逻辑上的一个信道, TCP 的连接是需要三次握手的,因此咱们为了尽量减少短时间多次发送请求时,用于建立 TCP 连接的资源消耗,故而咱们就建立一个逻辑上的信道,让这些信道去共享一个 TCP 连接,达到对这一个 TCP 连接的复用,从而减少多次建立 TCP 连接的资源消耗.
  • ExchangeDelcare 举例,服务器与客户端之间利用channel实现如下流程:
    在这里插入图片描述

服务器实现

消息队列本体服务器(本质上就是⼀个 TCP 的服务器)
在这里插入图片描述

客户端实现

  • Connection 类

    • 表示一个TCP连接
    • 该类持有 Socket对象
    • 管理多个 Channel 对象
    • 可以发送请求,读取响应(创建⼀个扫描线程,由这个线程负责不停地从 socket 中读取响应数据,把这个响应数据再交给对应的 channel 进⾏处理)
  • Channel 类

    • 表示一个逻辑上的连接
    • 提供⼀系列的⽅法,去和服务器提供的核⼼API对应
  • ConnectionFactory 类

    • ConnectionFactory类主要功能:创建出连接 Connection 对象
    • 该类实现:
@Data
public class ConnectionFactory {
// brokerserver 的ip地址
private String host;
// brokerserver 的port
private int port;
public Connection newConnection() throws IOException {
Connection connection = new Connection(host,port);
return connection;
}
}

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

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

相关文章

人工智能|机器学习——CURE聚类算法(层次聚类)

1.CURE聚类概述 绝大多数聚类算法或者擅长处理球形和相似大小的聚类.或者在存在孤立点时变得比较脆弱。CURE采用了一种新颖的层次聚类算法.该算法选择基于质心和基于代表对象方法之间的中间策略。它不同于单个质心或对象来代表一个类,而是选择…

【Jenkins】data stream error|Error cloning remote repo ‘origin‘ 错误解决【亲测有效】

错误构建日志 17:39:09 ERROR: Error cloning remote repo origin 17:39:09 hudson.plugins.git.GitException: Command "git fetch --tags --progress http://domain/xxx.git refs/heads/*:refs/remotes/origin/*" returned status code 128: 17:39:09 stdout: 17…

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化,随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID,用于BLDC速度控制 仿真平台为:MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例:

Python数据分析-4

1.对于一组电影数据,呈现出rating,runtime的分布情况: #encodingutf-8 import pandas as pd import numpy as np from matplotlib import pyplot as plt file_path "./youtube_video_data/IMDB-Movie-Data.csv" df pd.read_csv(file_path) …

若依Vue3图片预览大图遮罩层和表格的border css层级冲突

样式层级出现问题,表格的层级高于图片的层级 1.解决方式一:设置此文件的该属性(z-index)为继承,则显示正常 .el-table .el-table__cell { z-index: inherit; } 2.解决方式二:将此属性设置为true(本人试了…

数字生活的未来:探索Web3的全新世界

随着科技的飞速发展,我们正迈向一个数字化的未来。而在这个数字化的时代,Web3技术的崛起正引领着我们进入一个全新的世界。本文将深入探讨Web3技术的特点以及它给我们带来的全新体验。 1. 去中心化的特点 Web3的去中心化是其最显著的特点之一&#xff0…

【图论】计算图的n-hop邻居个数,并绘制频率分布直方图

计算图的n-hop邻居个数,并绘制频率分布直方图 在图论中,n-hop邻居(或称为K-hop邻居)是指从某个顶点出发,通过最短路径(即最少的边数)可以到达的所有顶点的集合,其中n(或…

Jmeter扩展开发--自定义java取样器

简介 jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。但在某些特殊情况下,还是希望能做自定义压测处理,此时就涉及Jmeter的扩展开发自定义Java取样器,如下图所示&#…

给电脑加硬件的办法 先找电脑支持的接口,再买相同接口的

需求:我硬盘太小,换或加一个大硬盘 结论:接口是NVMe PCIe 3.0 x4 1.找到硬盘型号 主硬盘 三星 MZALQ512HALU-000L2 (512 GB / 固态硬盘) 2.上官网查 或用bing查 非官方渠道信息,不确定。

linux安全--Nginx与Tomcat实现负载均衡

目录 1.实验拓扑原理图,前提实现全网互通 2.找到nginx的conf目录中的nginx.conf文件 3.实验效果 1.实验拓扑原理图,前提实现全网互通 搭建全网互通可以看https://blog.csdn.net/m0_74313947/article/details/136008513?spm1001.2014.3001.5501 搭建N…

微信小程序 uniapp奶茶点单系统r4112

系统功能有:信点单小程序分为小程序部分和后台管理两部分,小程序部分的主要功能包含:用户注册登录,查看商品信息,加入购物车,结算并生成订单,订单管理,资讯管理,个人中心…

创新营销的新篇章:企业如何通过VR虚拟发布会提升品牌影响力

在数字化转型的浪潮中,VR虚拟发布会作为一种新兴的营销手段,正逐渐成为企业品牌推广和产品发布的重要选择。通过利用虚拟现实技术,企业能够在虚拟空间中举办发布会,为参与者提供沉浸式的体验。 一、创新体验:虚拟空间的…