微服务架构中间件安装部署
微服务架构中间件安装部署
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控制器,积分分离控制器以及滑模控制器。通过对比三个算法可知,采用滑模控制算法,其具有最快的收敛性能,较强的鲁棒性&…...

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

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

动态规划:基本概念
Dynamic Programming 动态规划(Dynamic Programming, DP) 是一种算法设计技巧,通常用来解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为更小的子问题,逐步解决这些子问题并将结果存储起来,以避免重复计…...
小山菌_代码随想录算法训练营第二十九天| 455. 分发饼干 、376. 摆动序列、53. 最大子序和
455. 分发饼干 文档讲解:代码随想录.分发饼干 视频讲解:贪心算法,你想先喂哪个小孩?| LeetCode:455.分发饼干 状态:已完成 代码实现 class Solution { public:int findContentChildren(vector<int>&…...

快手可灵大模型开放视频续写功能,可生成最长约3分钟视频
6月21日,可灵再度进化,正式推出图生视频功能,支持用任意静态图像生成5s视频,并且可搭配不同的文本内容,实现丰富的视觉叙事 。 同时,可灵还发布了业内领先的视频续写功能,可为已生成的视频&…...

【代码随想录】【算法训练营】【第45天】 [198]打家劫舍 [213]打家劫舍II [337]打家劫舍III
前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 45,周五,坚持不了一点~ 题目详情 [198] 打家劫舍 题目描述 198 打家劫舍 解题思路 前提: 思路: 重点: 代码实现 C语言 虚拟头…...

python安装目录文件说明----Dlls文件夹
在Python的安装目录下,通常会有一个DLLs文件夹,它是Python标准库的一部分。这个文件夹包含了一些动态链接库(Dynamic Link Libraries,DLL),这些库提供了Python解释器和标准库的一些关键功能。以下是对这个文…...
java实现持续集成
要使用Java实现Jenkins持续集成,你可以使用Jenkins的Java客户端库来执行一些常见的操作,例如创建任务,触发构建等。下面是一个简单的示例代码,展示了如何使用Java实现Jenkins持续集成: java import com.offbytwo.jenk…...

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

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

MySQL性能问题诊断方法和常用工具
作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享。MySQL运…...
CGFloat转NSString保持原有的精度,末尾不添加0
问题阐述: 我们进行CGFloat转NSString可能会遇到一个问题 例如有一个CGFloat的值为2.1,转化成NSString后显示2.1000... 解决办法: 方法一: 如何解决呢,可以使用%g格式符,可以保证传入的不管是2还是2.1…...

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

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...