当前位置: 首页 > news >正文

微服务架构中间件安装部署

微服务架构中间件安装部署

jdk安装

安装包jdk-8u144-linux-x64.tar.gz

先检查系统原版本的jdk并卸载
rpm -qa | grep java
显示信息如下:
tzdata-java-2014g-1.el6.noarch
java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
卸载OpenJDK,执行以下操作:
rpm -e --nodeps tzdata-java-2014g-1.el6.noarch
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el6_5.x86_64
再次查看JDK信息,确认已经卸载成功
rpm –qa | grep java
上传jdk-8u144-linux-x64.tar.gz到/home目录下
tar xvf jdk-8u144-linux-x64.tar.gz # 压缩包解压
mv jdk-8u144 jdk1.8 # 将jdk目录更名,以便配置环境变量
打开环境变量配置文件,向文件最后追加以下内容
vim /etc/profile
export JAVA_HOME=/home/jdk1.8
export JRE_HOME= J A V A H O M E / j r e e x p o r t P A T H = JAVA_HOME/jre export PATH= JAVAHOME/jreexportPATH=PATH: J A V A H O M E / b i n e x p o r t C L A S S P A T H = . / : JAVA_HOME/bin export CLASSPATH=./: JAVAHOME/binexportCLASSPATH=./:JAVA_HOME/lib:$JAVA_HOME/jre/lib
保存退出
使修改立即生效,执行如下命令
source /etc/profile
java -version # 查看jdk版本是否为1.8

nginx安装

请使用root用户登录执行以下命令,安装nginx依赖包,两台服务器都执行如下命令

tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/opt/nginx
make
make install
cd /opt/nginx
修改主配置/opt/nginx/conf/nginx.conf
在http{
}里添加
include /opt/nginx/conf.d/*.conf;
创建目录和虚拟配置文件
mkdir /opt/nginx/conf.d
vim /opt/nginx/conf.d/gateway.conf
内容如下
server {
listen 80;
server_name localhost;
location / {
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types application/javascript text/css text/xml;
root /opt/dist/;
try_files $uri KaTeX parse error: Expected 'EOF', got '}' at position 36: …x index.html; }̲ location @rou… /index.html last;
}
location /adt/ {
proxy_pass http://127.0.0.1:81/;
client_max_body_size 100m;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
解释:
/opt/dist/是前端页面文件
location /adt/ {
proxy_pass http://127.0.0.1:81/;
client_max_body_size 100m;
}
跳转网关jar包sc-gateway-1.0.0.jar的启动ip和端口,具体ip需要修改
nginx检查和启动
/sbin/nginx -t #配置文件检查
./sbin/nginx #启动nginx
./sbin/nginx -s reload #nginx平滑重启

rocketmq集群安装

集群方式:双主双从
机器数量:两台。
IP分别是1.1.1.1和1.1.1.2 (ip只做示范用,根据实际情况来)
两台需要先安装jdk1.8,参照jdk安装步骤。

把安装包上传到两台服务器/opt/下
unzip rocketmq-all-4.7.0-bin-release.zip
mv rocketmq-all-4.7.0-bin-release rocketmq
我们需要修改两台机器/opt/rocketmq/conf/2m-2s-asyn/下的
broker-a.properties (1.1.1.1机器修改)
broker-a-s.properties (1.1.1.1机器修改)
broker-b.properties (1.1.1.2机器修改)
broker-b-s.properties (1.1.1.2机器修改)
四个文件。

1.1.1.1修改/opt/rocketmq/conf/2m-2s-async/broker-a.properties

namesrvAddr=1.1.1.1:9876;1.1.1.2:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerIP1=1.1.1.1
brokerId=0
autoCreateTopicEnable=false
sendMessageThreadPoolNums=128
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
#存储路径
storePathRootDir=/opt/rocketmq/store
#commitLog存储路径
storePathCommitLog=/opt/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/opt/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq/store/abort
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
#消息在发送队列超时时间
waitTimeMillsInSendQueue=300

1.1.1.2修改/opt/rocketmq/conf/2m-2s-async/broker-a-s.properties

namesrvAddr=1.1.1.1:9876;1.1.1.2:9876
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerIP1=1.1.1.1
listenPort=10950
brokerId=1
autoCreateTopicEnable=false
sendMessageThreadPoolNums=128
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#存储路径
storePathRootDir=/opt/rocketmq/store/slave
#commitLog存储路径
storePathCommitLog=/opt/rocketmq/store/slave/commitlog
#消费队列存储路径
storePathConsumeQueue=/opt/rocketmq/store/slave/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/store/slave/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/store/slave/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq/store/slave/abort
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
#消息在发送队列超时时间
waitTimeMillsInSendQueue=300

1.1.1.3修改/opt/rocketmq/conf/2m-2s-async/broker-b.properties

namesrvAddr=1.1.1.1:9876;1.1.1.2:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerIP1=1.1.1.2
brokerId=0
autoCreateTopicEnable=false
sendMessageThreadPoolNums=128
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
#存储路径
storePathRootDir=/opt/rocketmq/store
#commitLog存储路径
storePathCommitLog=/opt/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/opt/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq/store/abort
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
#消息在发送队列超时时间
waitTimeMillsInSendQueue=300

1.1.1.4修改/opt/rocketmq/conf/2m-2s-async/broker-b-s.properties

namesrvAddr=1.1.1.1:9876;1.1.1.2:9876
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerIP1=1.1.1.2
listenPort=10950
brokerId=1
autoCreateTopicEnable=false
sendMessageThreadPoolNums=128
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
#存储路径
storePathRootDir=/opt/rocketmq/store/slave
#commitLog存储路径
storePathCommitLog=/opt/rocketmq/store/slave/commitlog
#消费队列存储路径
storePathConsumeQueue=/opt/rocketmq/store/slave/consumequeue
#消息索引存储路径
storePathIndex=/opt/rocketmq/store/slave/index
#checkpoint 文件存储路径
storeCheckpoint=/opt/rocketmq/store/slave/checkpoint
#abort 文件存储路径
abortFile=/opt/rocketmq/store/slave/abort
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
#消息在发送队列超时时间
waitTimeMillsInSendQueue=300

修改启动参数

默认启动一般需要4-8G的虚拟机jvm参数空间,修改为2g
两台机器都修改/opt/rocketmq/bin/runserver.sh中的

JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
两台机器都修改/opt/rocketmq/bin/runbroker.sh中的
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn2g"
启动服务

两台服务器都启动mqnamesrv

nohup sh /opt/rocketmq/bin/mqnamesrv &

1.1.1.1启动broker

nohup sh /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/2m-2s-async/broker-a.properties > broker-a.log &

nohup sh /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/2m-2s-async/broker-a-s.properties > broker-a-s.log &

1.1.1.2启动broker

nohup sh /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/2m-2s-async/broker-b.properties > broker-b.log &

nohup sh /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/2m-2s-async/broker-b-s.properties > broker-b-s.log &

界面化安装

上传 rocketmq-console-ng-1.0.1.jar

nohup java -jar rocketmq-console-ng-1.0.1.jar --server.port=8080 --rocketmq.config.namesrvAddr=127.0.0.1:9876 > mqconsole.log &
浏览器访问8080端口
可以看到集群情况

添加topic
sc-charge-service-topic
sc-credit-service-topic
sc-decision-service-topic
sc-process-controller-topic
sc-service-async-topic
sc-variable-execute-topic

redis集群安装

安装包 redis-5.0.4.tar.gz
redis集群需要6个节点,每台服务器两个节点,所以需要三台中间件服务器
17.1.111.172 17.1.111.173 17.1.111.174
(ip只做示范,具体根据实际来)
redis安装包上传至上面三台服务器指定安装目录后解压
在每台服务器做如下操作(可开启多个xshell批量发送命令)
tar zxvf redis-5.0.4.tar.gz
进入解压后目录进行编译安装

cd redis-5.0.4
make && make install
期间如果有报错就是系统缺少依赖包,根据提示安装即可
mkdir -p /home/redis-cluster/7001 # 创建集群目录及节点
mkdir -p /home/redis-cluster/7002 # 创建集群目录及节点
cp redis.conf /home/redis-cluster/7001
cp redis.conf /home/redis-cluster/7002
然后都进行修改配置文件,此处列举一个,其他节点请按实际修改
vim /home/redis-cluster/7001/redis.conf
bind 17.1.111.172 //修改为本机ip地址
port 7001 //定义端口号
daemonize yes //开启redis后台运行
masterauth test@redis2019 //设置集群redis连接密码
requirepass test@redis2019 //修改redis连接密码
pidfile /home/redis-cluster/7001/redis_7001.pid //pid文件
logfile “/home/redis-cluster/7001/7001.log” //开启redis的日志文件
cluster-enabled yes //开启集群
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 15000 //请求超时
appendonly yes //aof日志开启

cp redis.conf …/7002/ //配置文件拷贝到7002文件夹
替换7002配置文件里的7001配置
配置都完成后可以启动各个节点,进入配置文件所在目录启动各个节点
redis-server /home/redis-cluster/7001/redis.conf
ps -ef | grep redis #查看服务
其他几台服务也是按上述步骤操作即可,相应ip、目录按实际修改即可
搭建好redis节点后,现在要创建集群,确认所有的节点都启动
集群创建方式
redis-cli -a test@redis2019 --cluster create --cluster-replicas 1 17.1.111.172:7001 17.1.111.172:7002 17.1.111.173:7001 17.1.111.173:7002 17.1.111.174:7001 17.1.111.174:7002
解释 --replicas 1 表示自动为每一个master节点分配一个slave节点,上面有6个节点,程序会按照一定规则生成3个master(主)3个slave(从)
运行,提示输入yes
这里集群已经初步搭建完成
集群创建成功登陆任意redis结点查询集群中的节点情况。
redis-cli -c -a test@redis2019 -h 17.1.111.172 -p 7001 // -c表示以集群方式连接redis
cluster nodes 查询集群结点信息
cluster info 查询集群状态信息

终于解决了,问题真出在redis.conf里,该文件里被添加了新的命令如下:

#新添加
rename-command FLUSHALL “”
rename-command FLUSHDB “”
rename-command KEYS “”
rename-command SHUTDOWN “”
rename-command DEL “”
rename-command EVAL “”

nacos安装

安装包

tar zxvf nacos-server-1.2.1.tar.gz
1.安装数据库和jdk,版本要求:5.6.5+,jdk1.8
2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。类似如下
数据库名字需要自己创建,还有相应的授权。
4.集群模式在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)
例如
192.168.1.1:8848
192.168.1.2:8848
192.168.1.3:8848
5.startup.sh启动配置里面
exprot MODE=”cluster”#集群模式启动
exprot MODE=”standalone”#单机模式启动
sh nacos/bin/startup.sh 启动nacos
启动后浏览器访问http://ip:8848/nacos
即可成功访问
默认账号密码nacos:nacos
集群模式给三个nacos架构前面搭建一台nginx,nginx搭建参考nginx安装。
6.由nginx负载三个nacos。配置文件如下:
upstream nacos {
server 192.168.1.1:8848;
server 192.168.1.2:8848;
server 192.168.1.3:8848;
}
server {
listen 8838;
server_name localhost;
location / {
proxy_pass http://nacos;
}
}
默认账号密码nacos:nacos

ELK安装

es安装
需要jdk1.8版本,具体参照jdk安装
首先请先优化limits.conf sysctl.conf 文件参数,否则后面启动会报错

vim /etc/security/limits.conf

添加
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
vim /etc/sysctl.conf
添加
vm.max_map_count=655360
sysctl -p

开始部署es集群
服务器:3台。
ip分别为192.168.1.1,192.168.1.2,192.168.1.3(实际生产请修改)
三台机器都操作。

上传包至/opt/下
创建一个普通用户
useradd es
切换root用户操作
tar xvf elasticsearch-6.8.6.tar.gz
mv elasticsearch-6.8.6 elasticsearch
cd elasticsearch/config/
vim elasticsearch.yml
cluster.name: sc #集群名字,三台集群的集群名字都必须一致
node.name: es1 #节点名字,三台ES节点字都必须不一样
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs
network.host: 192.168.1.1 # 本机IP
http.port: 9200
transport.tcp.port: 9300
transport.tcp.compress: true #压缩tcp传输时的数据
discovery.zen.ping.unicast.hosts: [“192.168.1.1”,“192.168.1.2”,“192.168.1.3”]
discovery.zen.minimum_master_nodes: 2 #集群最少的master数
xpack.security.enabled: true #es访问开启密码认证
xpack.security.transport.ssl.enabled: true
http.cors.enabled: true
http.cors.allow-origin: “*”
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
生成的证书放在 config下
三台机器不一样的配置点如下
node.name: es1 #192.168.1.1
node.name: es1 #192.168.1.2
node.name: es1 #192.168.1.3

创建目录和修改权限

mkdir -p /opt/elasticsearch/data
mkdir -p /opt/elasticsearch/logs
chown -R es:es /opt/elasticsearch

切换到es用户

su es
cd /opt/elasticsearch
./bin/elasticsearch -d #后台运行模式
浏览器访问9200
http://localhost:9200/_cluster/health?pretty #查看集群状态
status:green

创建es各个组件密码,三台机器都执行

elasticsearch-setup-passwords interactive
按提示输入各个组件的账号密码
密码都是elastic

logstash安装:

文件上传到/opt/下

tar zxvf logstash-6.8.6.tar.gz

cd logstash-6.8.6/config
vim logstash.conf # 编辑一个config文件
input{
tcp{
port=> 5044
codec=> “json”
}
}

output{
elasticsearch {
hosts => “192.168.1.10:9200”# es地址
index => “%{[appname]}-%{+YYYY.MM.dd}”
user =>“elastic”
password => “elastic”
}
}

kibana安装:

安装包上传到/opt/下

tar zxvf kibana-6.8.6-linux-x86_64.tar.gz
cd kibana-6.8.6-linux-x86_64/
vim config/kibana.yml
server.port: 5601
server.host: “192.168.1.10”
elasticsearch.hosts:[“http://192.168.1.10:9200”] # elasticsearch的地址及端口
elasticsearch.username: “elastic” #连接es的账号密码
elasticsearch.password:”test@2020
i18n.locale:”zh-CN”#中文
grep -vE “$|#” config/kibana.yml # 验证修改的
screen ./bin/kibana #启动kibana,访问IP:5601

添加索引

此时可查看日志是否输出成功,成功即可

mysql安装

安装包mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz
在操作系统中安装MySQL时需将系统自带的MySQL卸载掉,卸载步骤如下:
检查原来mysql是否安装,有则删除

rpm -qa | grep mysql

创建mysql用户

useradd -M -s /sbin/nologin mysql

将下载的tar包上传到服务器,解压 (我下载的是免编译的包,解压后可以直接用)

tar zxvf mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz -C /opt/
cd /opt/
mv mysql-5.7.16-linux-glibc2.5-x86_64 mysql
chown -R mysql:mysql /opt/mysql/
初始化数据库
cd /opt/mysql/
./bin/mysql_install_db --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data 注意看是否有报错
如有报错 按提示安装系统依赖包 类似安装下这两个
yum -y install libaio
yum -y install library
cp -a ./support-files/my-default.cnf /etc/my.cnf
cp -a ./support-files/mysql.server /etc/init.d/mysqld
./bin/mysqld_safe --user=mysql &

vim /etc/my.cnf # 修改一下端口号
[mysqld]
port=3306

systemctl enable mysqld
systemctl restart mysqld
ps -ef | grep mysql # 注意看是服务是否开启
cat /root/.mysql_secret # 查看mysql初始化密码
ln -s /opt/mysql/bin/* /usr/local/sbin/
mysql -uroot -p
alter user user() identified by “test@mysql2019”; #修改mysql root用户密码
flush privileges;
重启数据库,建议杀死进程
ps -ef | grep mysql
kill -9 mysql-pid
编辑配置文件
vim /etc/my.cnf
[mysql]
default-character-set = utf8

[mysqld]
port = 3306
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
character-set-server = utf8
collation-server = utf8_general_ci
default-storage-engine = INNODB
lower_case_table_names = 1
tmpdir = /tmp
socket = /tmp/mysql.sock
log-error = /opt/mysql/data/error.log
pid-file = /opt/mysql/data/mysql.pid
max_connections = 8000
back_log = 3000
wait_timeout = 7200
interactive_timeout = 7200
key_buffer_size = 1024M
query_cache_size = 1024M
query_cache_type = 1
sort_buffer_size = 1024M
join_buffer_size = 1024M
thread_cache_size = 1000
thread_stack = 1024M
tmp_table_size = 1024M
innodb_buffer_pool_size = 30720M
innodb_flush_log_at_trx_commit = 1
innodb_thread_concurrrency = 0
innodb_log_buffer_size = 4096M
innodb_log_file_size = 4096M
innodb_flush_method = O_DIRECT

systemctl start mysqld
mysql -uroot -p # 新密码登录
授权远程访问(注意防火墙,selinux是否关闭)
GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ’ testmysql2019’ WITH GRANT OPTION;
flush privileges;
类似grant all on . to user1 identified by ‘123456’;

设置主从

两台服务器都需要安装上mysql 以下IP为示例IP

mysql 主 17.1.111.179
mysql 从 17.1.111.180
主mysql配置
vim my.cnf
[mysqld]
log-bin = mysql-bin #开启二进制日志
binlog_cache_size = 512M
max_binlog_cache_size = 4096M
max_binlog_size = 512M
server-id = 1 #设置server-id
expire_logs_days = 7 #设置binlog日志保存天数
sync_binlog = 1
slow_query_log = on
slow_query_log_file = /opt/mysql/data/mysql_slow_query.log
log_queries_not_using_indexs = on
long_query_time = 1

重启mysql,创建用于同步的用户账号

systemctl restart mysqld

创建用户并授权:用户:test@slave 密码:test@2019

CREATE USER ‘test@slave’@‘17.1.111.180’ IDENTIFIED BY ‘pwd@2019’; #创建用户
GRANT REPLICATION SLAVE ON . TO ‘test@slave’@‘17.1.111.180’; #分配权限
flush privileges;
SHOW MASTER STATUS; #查看master状态,记录二进制文件名(mysql-bin.000001)和位置(779)

从mysql配置

vim my.cnf
[mysqld]
server-id=2 #必须唯一

重启mysql,打开mysql会话,执行同步SQL语句

systemctl restart mysqld
mysql -uroot -p
CHANGE MASTER TO MASTER_HOST=‘17.1.111.180’,MASTER_USER=‘test@slave’,MASTER_PASSWORD=‘test@2019’,MASTER_LOG_FILE=‘mysql-bin.000001’,MASTER_LOG_POS=779;
start slave; # 启动slave同步进程
show slave status\G # 查看slave状态

测试同步,在主mysql建库,看从库是否同步,能同步即可

CREATE DATABASE database_name # 建库
CREATE TABLE 表名(
id int not null,
name char(20)
);
INSERT INTO 表名(列1,列2) VALUES (值1,值2)
DROP DATABASE 数据库名

相关文章:

微服务架构中间件安装部署

微服务架构中间件安装部署 jdk安装 安装包jdk-8u144-linux-x64.tar.gz 先检查系统原版本的jdk并卸载 rpm -qa | grep java 显示信息如下: tzdata-java-2014g-1.el6.noarch java-1.6.0-openjdk-1.6.0.0-11.1.13.4.el6.x86_64 java-1.7.0-openjdk-1.7.0.65-2.5.1.2.…...

车辆数据的提取、定位和融合(其一 共十二篇)

第一篇: System Introduction 第二篇:State of the Art 第三篇:localization 第四篇:Submapping and temporal weighting 第五篇:Mapping of Point-shaped landmark data 第六篇:Clustering of landma…...

Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用

文章目录 一、父组件数据传递N个层级的子组件vue3 provide 与 injectA组件名称 app.vueB组件名称 provideB.vueC组件名称 provideCSetup.vue 二、使用v-model指令实现父子组件的双向绑定父组件名称 app.vue子组件名称 v-modelSetup.vue 三、父组件props向子组件传值子组件 prop…...

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口,成为被动接口后,将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息,即已运行在OSPF协议…...

前端将Markdown文本转换为富文本显示/编辑,并保存为word文件

参考:https://www.wangeditor.com/ https://blog.csdn.net/weixin_43797577/article/details/138854324 插件: markdown-it traptitech/markdown-it-katex markdown-it-link-attributes highlight.js wangeditor/editor wangeditor/editor-for-vue html…...

git-shortlog详解

作用 git-shortlog - Summarize git log output 语法 git shortlog [<options>] [<revision-range>] [[--] <path>…​] git log --prettyshort | git shortlog [<options>] 功能描述 Summarizes git log output in a format suitable for inclus…...

通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器。通过对比三个算法可知&#xff0c;采用滑模控制算法&#xff0c;其具有最快的收敛性能&#xff0c;较强的鲁棒性&…...

Node.js 渲染三维模型并导出为图片

Node.js 渲染三维模型并导出为图片 1. 前言 本文将介绍如何在 Node.js 中使用 Three.js 进行 3D 模型渲染。通过结合 gl 和 canvas 这两个主要依赖库&#xff0c;我们能够在服务器端实现高效的 3D 渲染。这个方法解决了在服务器端生成和处理 3D 图形的需求&#xff0c;使得可…...

Win11下安装VS2022失败的解决办法

前几天我把我的HP Z840的操作系统换成了Win11&#xff0c;在重装VS2022时遇到了麻烦&#xff0c;提示无法安装 Microsoft.VisualStudio.Devenv.Msi。 查看安装日志提示&#xff1a;Could not write value devenv.exe to key \SOFTWARE\Microsoft\Internet Explorer\Main\Featur…...

动态规划:基本概念

Dynamic Programming 动态规划&#xff08;Dynamic Programming, DP&#xff09; 是一种算法设计技巧&#xff0c;通常用来解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为更小的子问题&#xff0c;逐步解决这些子问题并将结果存储起来&#xff0c;以避免重复计…...

小山菌_代码随想录算法训练营第二十九天| 455. 分发饼干 、376. 摆动序列、53. 最大子序和

455. 分发饼干 文档讲解&#xff1a;代码随想录.分发饼干 视频讲解&#xff1a;贪心算法&#xff0c;你想先喂哪个小孩&#xff1f;| LeetCode&#xff1a;455.分发饼干 状态&#xff1a;已完成 代码实现 class Solution { public:int findContentChildren(vector<int>&…...

快手可灵大模型开放视频续写功能,可生成最长约3分钟视频

6月21日&#xff0c;可灵再度进化&#xff0c;正式推出图生视频功能&#xff0c;支持用任意静态图像生成5s视频&#xff0c;并且可搭配不同的文本内容&#xff0c;实现丰富的视觉叙事 。 同时&#xff0c;可灵还发布了业内领先的视频续写功能&#xff0c;可为已生成的视频&…...

【代码随想录】【算法训练营】【第45天】 [198]打家劫舍 [213]打家劫舍II [337]打家劫舍III

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 45&#xff0c;周五&#xff0c;坚持不了一点~ 题目详情 [198] 打家劫舍 题目描述 198 打家劫舍 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 虚拟头…...

python安装目录文件说明----Dlls文件夹

在Python的安装目录下&#xff0c;通常会有一个DLLs文件夹&#xff0c;它是Python标准库的一部分。这个文件夹包含了一些动态链接库&#xff08;Dynamic Link Libraries&#xff0c;DLL&#xff09;&#xff0c;这些库提供了Python解释器和标准库的一些关键功能。以下是对这个文…...

java实现持续集成

要使用Java实现Jenkins持续集成&#xff0c;你可以使用Jenkins的Java客户端库来执行一些常见的操作&#xff0c;例如创建任务&#xff0c;触发构建等。下面是一个简单的示例代码&#xff0c;展示了如何使用Java实现Jenkins持续集成&#xff1a; java import com.offbytwo.jenk…...

ClickHouse安装与下载22.3.2.2

ClickHouse安装与下载 目录 1. ClickHouse简介 1.1 ClickHouse优点&#xff1a; 1.2 ClickHouse缺点&#xff1a; 1.3 ClickHouse引擎&#xff1a; 1.3.1 数据库引擎 1.3.2 表引擎 2. ClickHouse下载安装 2.1 ClickHouse下载安装 2.2 ClickHouse使用 1. ClickHouse简…...

【Go语言】Gin 框架教程

Gin 框架教程 1.第一个 Gin 程序 1.1 Gin 安装 # 执行执行如下操作即可&#xff0c;安装Gin前需要安装Go环境 go get -u -v github.com/gin-gonic/gin # -v&#xff1a;打印出被构建的代码包的名字 # -u&#xff1a;已存在相关的代码包&#xff0c;强行更新代码包及其依赖包…...

MySQL性能问题诊断方法和常用工具

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。MySQL运…...

CGFloat转NSString保持原有的精度,末尾不添加0

问题阐述&#xff1a; 我们进行CGFloat转NSString可能会遇到一个问题 例如有一个CGFloat的值为2.1&#xff0c;转化成NSString后显示2.1000... 解决办法&#xff1a; 方法一&#xff1a; 如何解决呢&#xff0c;可以使用%g格式符&#xff0c;可以保证传入的不管是2还是2.1…...

UDS服务——TransferData (0x36)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍TransferData (0x36)—— 数据传输,用于下载/上传数据时用的,数据的传输方向由不同的服务控制:0x34服务表示下载,0x35服务表示上传。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿传输数据服务…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...