RabbitMQ搭建集群环境、配置镜像集群、负载均衡

RabbitMQ集群搭建

  • Linux安装RabbitMQ
    • 下载
    • 安装
    • 基本操作命令
    • 开启管理界面及配置
  • RabbitMQ集群搭建
    • 确定rabbitmq安装目录
    • 启动第一个节点
    • 启动第二个节点
    • 停止命令
    • 创建集群
    • 查看集群
    • 集群管理
  • RabbitMQ镜像集群配置
    • 启用HA策略
    • 创建一个镜像队列
    • 测试镜像队列
  • 负载均衡-HAProxy
    • 安装HAProxy
    • 配置haproxy
    • 启动HAProxy服务
    • 查看HAProxy监控
    • Java代码连接MQ集群

Linux安装RabbitMQ

下载

RabbitMQ官方下载页:https://www.rabbitmq.com/download.html

RabbitMQ下载:https://github.com/rabbitmq/rabbitmq-server/tags

erlang下载:https://github.com/rabbitmq/erlang-rpm/releases

下载RabbitMQ与erlang: https://packagecloud.io/rabbitmq

安装

注意:在下载 rabbitmq-servererlang包时,若包名含el8代表需要Centos8才能安装!例如: rabbitmq-server-3.11.13-1.el8.noarch.rpm,否则安装将出现如下类似异常:

[root@node01 ~]# rpm -ivh erlang-25.3-1.el8.x86_64.rpm 
警告:erlang-25.3-1.el8.x86_64.rpm:V4 RSA/SHA256 Signature, 密钥 ID cc4bbe5b: NOKEY
错误:依赖检测失败:libcrypto.so.1.1()(64bit) 被 erlang-25.3-1.el8.x86_64 需要libcrypto.so.1.1(OPENSSL_1_1_0)(64bit) 被 erlang-25.3-1.el8.x86_64 需要libcrypto.so.1.1(OPENSSL_1_1_1)(64bit) 被 erlang-25.3-1.el8.x86_64 需要libstdc++.so.6(CXXABI_1.3.9)(64bit) 被 erlang-25.3-1.el8.x86_64 需要libtinfo.so.6()(64bit) 被 erlang-25.3-1.el8.x86_64 需要libz.so.1(ZLIB_1.2.7.1)(64bit) 被 erlang-25.3-1.el8.x86_64 需要

由于服务器时CentOS7,故寻找包名带el7的软件包,这里使用如下包

rabbitmq-server-3.6.5-1.noarch.rpmerlang-18.3-1.el7.centos.x86_64.rpm

下载地址:https://download.csdn.net/download/qq_38628046/87697057

1.安装或更新依赖环境

yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc
gcc-c++ kernel-devel m4 ncurses-devel tk tc xzyum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel
readline-devel tk-devel gcc make -y

2.安装erlang

[root@node01 ~]# rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...1:erlang-18.3-1.el7.centos         ################################# [100%]

3.安装rabbitmq

[root@node01 ~]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
警告:rabbitmq-server-3.6.5-1.noarch.rpm:V4 RSA/SHA1 Signature, 密钥 ID 6026dfca: NOKEY
错误:依赖检测失败:socat 被 rabbitmq-server-3.6.5-1.noarch 需要

访问:https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/下载依赖

在这里插入图片描述

wget http://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm
[root@node01 ~]# rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
警告:socat-1.7.3.2-2.el7.x86_64.rpm:V4 RSA/SHA1 Signature, 密钥 ID 87e360b8: NOKEY
错误:依赖检测失败:tcp_wrappers 被 socat-1.7.3.2-2.el7.x86_64 需要

接着再访问:https://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/下载依赖

wget http://mirrors.aliyun.com/centos/7.9.2009/os/x86_64/Packages/tcp_wrappers-7.6-77.el7.x86_64.rpm
[root@node01 ~]# rpm -ivh tcp_wrappers-7.6-77.el7.x86_64.rpm 
准备中...                          ################################# [100%]
正在升级/安装...1:tcp_wrappers-7.6-77.el7          ################################# [100%]
[root@node01 ~]# rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
警告:socat-1.7.3.2-2.el7.x86_64.rpm:V4 RSA/SHA1 Signature, 密钥 ID 87e360b8: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:socat-1.7.3.2-2.el7            ################################# [100%]
[root@node01 ~]# rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
警告:rabbitmq-server-3.6.5-1.noarch.rpm:V4 RSA/SHA1 Signature, 密钥 ID 6026dfca: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...1:rabbitmq-server-3.6.5-1          ################################# [100%]

注意:rabbitmq默认安装位置:/usr/lib/rabbitmq/bin

基本操作命令

检查RabbitMQ 的状态

systemctl status rabbitmq-server

启动RabbitMQ 服务

systemctl start rabbitmq-serversystemctl restart rabbitmq-server

停止RabbitMQ 服务

systemctl stop rabbitmq-server

将RabbitMQ设置为开机自启动

systemctl enable rabbitmq-server

开启管理界面及配置

开启管理界面

rabbitmq-plugins enable rabbitmq_management

修改默认配置信息

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

或者创建配置文件,在其中进行配置以覆盖默认配置信息

cd /usr/share/doc/rabbitmq-server-3.6.5/cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

RabbitMQ安装好后,访问http://ip:15672,使用guest用户名那与密码登录。

在这里插入图片描述

在3.3.1以后的版中,处于安全的考虑,guest这个默认的用户只能通过localhost来登录,其他的IP无法直接使用这个账号

编辑配置文件vim /etc/rabbitmq/rabbitmq.config,在其中添加以下内容:

[{rabbit, [{loopback_users, []}]}]

注意:只需要在合适的位置添加{loopback_users, []}]即可

%% -*- mode: erlang -*-
%% ----------------------------------------------------------------------------
%% RabbitMQ Sample Configuration File.
%%
%% See http://www.rabbitmq.com/configure.html for details.
%% ----------------------------------------------------------------------------
[{rabbit,[%%{loopback_users, []}%% Network Connectivity%% ====================%%%% By default, RabbitMQ will listen on all interfaces, using%% the standard (reserved) AMQP port.%%%% {tcp_listeners, [5672]},%% To listen on a specific interface, provide a tuple of {IpAddress, Port}.%% For example, to listen only on localhost for both IPv4 and IPv6:%%%% {tcp_listeners, [{"127.0.0.1", 5672},%%                  {"::1",       5672}]},

保存后重启rabbitmq-server即可使用guest用户名和密码来登录

在这里插入图片描述

RabbitMQ集群搭建

官方文档:https://www.rabbitmq.com/clustering.html

确定rabbitmq安装目录

查找rabbitmq的安装目录

[root@node01 rabbitmq-server-3.6.5]# whereis rabbitmq
rabbitmq: /usr/lib/rabbitmq /etc/rabbitmq
[root@node01 rabbitmq-server-3.6.5]# cd /usr/lib/rabbitmq/bin
[root@node01 bin]# ls
rabbitmqctl  rabbitmq-defaults  rabbitmq-env  rabbitmq-plugins  rabbitmq-server

确保RabbitMQ正常运行

rabbitmqctl status

然后停止rabbitmq服务

 systemctl stop rabbitmq-server

启动第一个节点

[root@node01 bin]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=mq1 rabbitmq-server startRabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/##  ############  Logs: /var/log/rabbitmq/mq1.log######  ##        /var/log/rabbitmq/mq1-sasl.log##########Starting broker...completed with 6 plugins.

在这里插入图片描述

启动第二个节点

web管理插件端口占用,所以还要指定其web插件占用的端口号。

[root@node01 bin]# RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=mq2 rabbitmq-server startRabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/##  ############  Logs: /var/log/rabbitmq/mq2.log######  ##        /var/log/rabbitmq/mq2-sasl.log##########Starting broker...completed with 6 plugins.

在这里插入图片描述

停止命令

[root@node01 ~]# rabbitmqctl -n mq1 stop
Stopping and halting node mq1@node01 ...[root@node01 ~]# rabbitmqctl -n mq2 stop
Stopping and halting node mq2@node01 ...

创建集群

mq1操作作为主节点:

注意:操作节点前,确保mq处于运行状态

[root@node01 ~]# rabbitmqctl -n mq1 stop_app
Stopping node mq1@node01 ...
[root@node01 ~]# rabbitmqctl -n mq1 reset
Resetting node mq1@node01 ...
[root@node01 ~]# rabbitmqctl -n mq1 start_app
Starting node mq1@node01 ...

mq2操作为从节点:

[root@node01 ~]# rabbitmqctl -n mq2 stop_app
Stopping node mq2@node01 ...
[root@node01 ~]# rabbitmqctl -n mq2 reset
Resetting node mq2@node01 ...
[root@node01 ~]# rabbitmqctl -n mq2 join_cluster mq1@'node01'
Clustering node mq2@node01 with mq1@node01 ...
[root@node01 ~]# rabbitmqctl -n mq2 start_app
Starting node mq2@node01 ...

查看集群

[root@node01 ~]# rabbitmqctl cluster_status -n mq1
Cluster status of node mq1@node01 ...
[{nodes,[{disc,[mq1@node01,mq2@node01]}]},{running_nodes,[mq2@node01,mq1@node01]},{cluster_name,<<"mq1@node01">>},{partitions,[]},{alarms,[{mq2@node01,[]},{mq1@node01,[]}]}]

查看web监控
在这里插入图片描述

集群管理

将节点加入指定集群中

注意:需停止RabbitMQ应用并重置节点

rabbitmqctl join_cluster {cluster_node} [–ram]

显示集群的状态

rabbitmqctl cluster_status

修改集群节点的类型

注意:需要停止RabbitMQ应用

rabbitmqctl change_cluster_node_type {disc|ram}

将节点从集群中删除,允许离线执行

rabbitmqctl forget_cluster_node [–offline]

在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息

这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了。

rabbitmqctl update_cluster_nodes {clusternode}

取消队列queue同步镜像的操作

rabbitmqctl cancel_sync_queue [-p vhost] {queue}

设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。

rabbitmqctl set_cluster_name {name}

RabbitMQ镜像集群配置

RabbitMQ 的默认集群模式可以让交换机、绑定等元数据复制到集群中的所有节点,从而保证这些元数据在整个集群中都是可用的。

但是,队列内容并不会被自动复制到集群中的其他节点上。这意味着,如果一个节点宕机或出现故障,就会导致该节点上的队列内容无法被消费者读取。

为了解决这个问题,需要创建镜像队列。镜像队列是一种特殊的队列类型,它会将队列的消息复制到集群中的其他节点上,从而保证在任何情况下都能够正常地消费队列的消息。

当需要构建高可用性的 RabbitMQ 集群时,通常会采用镜像队列来保证消息的传递和持久化。

启用HA策略

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以还是得先配置普通集群,然后才能设置镜像队列。

设置镜像队列有2种方式:

1.通过命令设置镜像队列

rabbitmqctl set_policy ha "^" '{"ha-mode":"all"}'

2.通过网页管理端设置镜像队列

Name:策略名称Pattern:匹配的规则,如果是匹配所有的队列,是^Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档

在这里插入图片描述

创建一个镜像队列

创建一个队列,然后可以看到队列开始进行同步
在这里插入图片描述
同步完成,mq1@node01节点上的队列数据向mq2@node01节点上同步
在这里插入图片描述

测试镜像队列

mq1@node01节点,向队列发送消息
在这里插入图片描述
查看mq2@node01节点的队列,发现消息已同步
在这里插入图片描述

负载均衡-HAProxy

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可
靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。
HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。

官方下载:https://www.haproxy.org/download/

安装HAProxy

下载HAProxy的tar.gz安装包

wget https://www.haproxy.org/download/2.7/src/haproxy-2.7.6.tar.gz

解压缩安装包

tar xvfz haproxy-2.7.6.tar.gz
cd haproxy-2.7.6

查看内核版本

[root@node01 ~]# uname -r
3.10.0-1160.88.1.el7.x86_64

编译并安装HAProxy

ARGET=linux310:内核版本ARCH=x86_64:系统位数PREFIX=/usr/local/haproxy:haprpxy安装路径
make TARGET=linux310 PREFIX=/usr/local/haproxy ARCH=x86_64make install PREFIX=/usr/local/haproxy

配置haproxy

建一个名为"haproxy"的用户组

# -r 将该用户组设置为系统级别的组
groupadd -r haproxy

创建一个名为"haproxy"的用户

# -g 将该用户添加到上面创建的"haproxy"用户组中
# -r 将该用户设置为系统级别用户
useradd -r -g haproxy haproxy

创建haproxy配置文件

mkdir -p /etc/haproxy# 源码目录下执行
cp examples/quick-test.cfg /etc/haproxy/haproxy.cfg

修改配置文件/etc/haproxy/haproxy.cfg,按照需要进行配置,参考如下示例

# 全局配置参数,属于进程级的配置
global# 日志配置 local0:日志设备 info:日志记录级别log 127.0.0.1 local0 info# haproxy工作目录chroot /usr/local/haproxy# haproxy启动后进程的pid文件路径pidfile /usr/local/haproxy/haproxy.pid# 每个haproxy进程可接受的最大并发连接数maxconn 4000user    haproxy        group   haproxy  # haproxy启动时可创建的进程数,默认1个,值应小于服务器的CPU核数,高版本已弃用# nbproc  1# haproxy在后台运行daemon# 默认参数配置    
defaultsmode tcplog globaloption abortoncloseoption redispatch# 配置连接后端服务器失败重试次数,超过3次后会将失败的后端服务器标记为不可用retries 3# 配置成功连接到一台服务器的最长等待时间,默认单位是毫秒,也可自己指定单位timeout connect 10000# 配置连接客户端发送数据时的最长等待时间,默认单位是毫秒,也可自己指定单位timeout client 1m# 配置服务器端回应客户端数据发送时最长等待时间,默认单位是毫秒,也可自己指定单位timeout server 1m# 配置对后端服务器的检测超时时间,默认单位是毫秒,也可自己指定单位timeout check  10s# 最大连接数maxconn 3000# 定义服务叫"proxy_status "名字的虚拟节点
# haproxy代理的两个mq
listen proxy_status # 配置监听5672端口bind  0.0.0.0:5672# tcp模式  mode tcp# 轮询访问mq1与mq2balance roundrobin# mq真实IP:端口server node01 192.168.10.13:5673 check inter 10sserver node02 192.168.10.13:5674 check inter 10s# 定义服务叫"admin_stats"名字的虚拟节点     
# haproxy管理页面
frontend admin_stats # 监听地址和端口bind  *:8888# http模式  mode http# 配置在客户端和服务器完成一次连接请求后,haproxy主动关闭此TCP连接option httpclose# 配置后端服务器需要获得客户端的真实IP,通过增加"X-Forwarded-For"来记录客户端IPoption forwoardfor# 启用日志来记录http请求,默认只对tcp日志进行日志记录option httplogmaxconn 10stats enablestats refresh 30s# 统计页面路径stats uri /admin# 设置统计页面认证的用户和密码stats auth admin:123123stats hide-versionstats admin if TRUE

启动HAProxy服务

/usr/local/haproxy/sbin/haproxy -f  /etc/haproxy/haproxy.cfg

查看haproxy进程状态

[root@node01 haproxy]# ps -ef|grep haproxy
haproxy    6061      1  0 22:51 ?        00:00:00 /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
root       6318  27966  0 22:51 pts/8    00:00:00 grep --color=auto haproxy

查看HAProxy监控

访问http://192.168.10.13:8888/admin查看HAProxy监控
在这里插入图片描述

Java代码连接MQ集群

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** 发送消息*/
public class HelloWorld {public static void main(String[] args) throws IOException, TimeoutException {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 设置参数factory.setHost("192.168.10.13");// HaProxy的ipfactory.setPort(5672); //端口 HaProxy的监听的端口// 创建连接 ConnectionConnection connection = factory.newConnection();// 创建ChannelChannel channel = connection.createChannel();// 创建队列Queuechannel.queueDeclare("hello_queue",true,false,false,null);String body = "hello rabbitmq";// 发送消息channel.basicPublish("","hello_queue",null,body.getBytes());// 释放资源channel.close();connection.close();System.out.println("send success....");}
}

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

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

相关文章

【精选】计算机网络教程(第3章数据链路层)

目录 前言 第3章数据链路层 1、差错检测&#xff08;CRC&#xff09; 2、点对点协议&#xff08;了解应用场景&#xff09; 3、什么是碰撞域&#xff0c;什么是广播域 碰撞域&#xff08;Collision Domain&#xff09;&#xff1a; 广播域&#xff08;Broadcast Domain&a…

计算机组成原理学习(输入输出系统)

目录 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算机的结构 二.常见的&#xff08;I/O设备或者是外部设备&#xff09; ​ 三.主机如何与I/O设备进行交互 四.I/O控制方式简介 五.I/O系统的基本组成 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算…

一键安装下载3ds Max!别墅还是宫殿?3ds Max助你建造梦幻般的艺术建筑

不再浪费时间在网上寻找3ds Max的安装包了&#xff01;因为你所需要的一切都可以在这里找到&#xff01;作为一款全球领先的3D设计工具&#xff0c;3ds Max为创作者们带来了前所未有的便利和创作灵感。无论是建筑设计、影视特效还是游戏开发&#xff0c;3ds Max都能帮助你实现想…

C++——C++11(1)

时至今日&#xff0c;C标准已经到了C23&#xff0c;但是你要说哪一次提出的标准最经 典&#xff0c;那C11一定会被人提及&#xff0c;C11带来了数量可观的变化&#xff0c;其中包 含了约140个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;这使得 C11更像是从…

一个神奇的Python库:Evidently,机器学习必备

Evidently 是一个面向数据科学家和机器学习工程师的开源 Python 库。它有助于评估、测试和监控从验证到生产的数据和 ML 模型。它适用于表格、文本数据和嵌入。 简介 Evidently 是一个开源的 Python 工具&#xff0c;旨在帮助构建对机器学习模型的监控&#xff0c;以确保它们的…

博客动态校验+静态校验二次开发方式

静态校验&#xff1a; 1&#xff1a;将需要静态校验的参数继承BaseReqeust类重写validate方法&#xff1a; 动态校验&#xff1a; 1&#xff1a;在需要校验的实现类上加&#xff1a; BizValidate注解 2&#xff1a;写一个校验类&#xff0c;方法命名规范为&#xff1a;需要校…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

Android--Jetpack--数据库Room详解一

人生何须万种愁&#xff0c;千里云烟一笑收 一&#xff0c;定义 Room也是一个ORM框架&#xff0c;它在SQLite上提供了一个抽象层&#xff0c;屏蔽了部分底层的细节&#xff0c;使用对象对数据库进行操作&#xff0c;进行CRUD就像对象调用方法一样的简单。 二&#xff0c;角色介…

基于YOLOv8深度学习的路面标志线检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

docker容器-compose单机容器编排

目录 yaml文件使用的注意事项 yaml文件的基本数据结构 docker-compose单机容器编排 docker-compose的常用命令 安装docker-compose docker-compose部署nginx nginx文件 yml文件 docker-compose创建镜像和容器 docker-compose构建lnmp nginx文件 mysql文件 php文件…

华为组播配置案例

igmp-snooping主要用于生成二层组播表项&#xff0c;防止交换机全部接口都发组播报文 PC端配置&#xff1a; 组播源配置&#xff1a; R1 interface GigabitEthernet0/0/0 ip address 10.0.0.1 255.255.255.0 pim dm interface GigabitEthernet0/0/1 ip address 192.168.0…

UE5 C++(三)— 基本用法(生命周期、日志、基础变量)

文章目录 生命周期日志打印Outlog打印屏幕打印 基础变量类型FString、FName 和 FText&#xff0c;三者之间的区别 基础数据类型打印 忘记说了每次在Vscode修改后C脚本后&#xff0c;需要编译一下脚本&#xff0c;为了方便我是点击这里编译脚本 生命周期 Actor 生命周期官方文档…

年底总结-基于战略落地的年度经营计划

到了年底&#xff0c;今年不管经济如何&#xff0c;形势多么不好&#xff0c;这个月也要结束2023年了&#xff0c;在这个阶段最关键的是做好今年的总结以及明年的计划。 总结是为了更好地做明年的计划和形势的预判。 借用数据表作为工具&#xff0c;科学理性地对自身公司的经…

基于Java+Swingt学生信息管理系统

基于JavaSwing学生信息管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 1.用户登陆&#xff1a;在帮助按钮处&#xff0c;可以查看登陆账号及密码&#xff1a; 账号admin,密码123456 在未输入的情况下&#xff0c;会提示用户名不能为空&#xff…

广受好评的开源基础大模型最全梳理,你最钟意哪一个?

2023 年即将过去。一年以来&#xff0c;各式各样的大模型争相发布。当 OpenAI 和谷歌等科技巨头正在角逐时&#xff0c;另一方「势力」悄然崛起 —— 开源。 开源模型受到的质疑一向不少。它们是否能像专有模型一样优秀&#xff1f;是否能够媲美专有模型的性能&#xff1f; 迄…

C#实现MQTT over WebSocket

如何在网页端实现MQTT消息的发布和订阅&#xff1f; 实现MQTT功能&#xff0c;可以发布和订阅主题通过WebSocket协议将MQTT消息转发给对应的网页端 带着这个实现思路&#xff0c;采用C#控制台程序实现MQTT服务端功能&#xff0c;web端可以直接使用websocket插件与服务端双向通…

第7章 排序

前言 在这一章&#xff0c;我们讨论数组元素的排序问题。为简单起见&#xff0c;假设在我们的例子中数组只包含整数&#xff0c;虽然更复杂的结构显然也是可能的。对于本章的大部分内容&#xff0c;我们还假设整个排序工作能够在主存中完成&#xff0c;因此&#xff0c;元素的个…

计算机网络知识点

计算机网络中的OSI模型 OSI模型是指“国际标准化组织(SO)”提出的使各种计算机在世界范围内互通互联的网络标准框架简称开放系统互联参考模型 (OSI)。 七层模型&#xff1a;应用层、表示层、会话层、传输层、网络层&#xff08;IP协议、RARP协议、ARP协议、CIDR协议&#xff0…

kafka学习笔记--Topic 数据的存储机制

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

docker小白第五天

docker小白第五天 docker的私有库 有些涉密的信息代码不能放在阿里云的镜像仓库&#xff0c;因此需要构建一个个人内网专属的私有库&#xff0c;将镜像或者容器代码进行推送保存。 下载镜像docker registry 执行代码docker pull registry&#xff0c;用于搭建私服前的准备。…