首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,272 阅读
2
类的加载
832 阅读
3
Spring Cloud OAuth2.0
827 阅读
4
SpringBoot自动装配原理
735 阅读
5
集合不安全问题
631 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
Linux
容器
Docker
Containerd
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
OpenCV
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Canvas
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
ndarray
蘇阿細
累计撰写
435
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
Linux
容器
Docker
Containerd
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
页面
统计
关于
搜索到
435
篇与
的结果
2021-04-29
Sentinel
一、安装1、下载sentinel地址:https://github.com/alibaba/Sentinel2、运行java -jar sentinel-dashboard-1.8.1.jar3、注意事项sentinel默认8080端口,需注意端口冲突的问题二、微服务整合Sentinel1、启动Nacoswindows环境或Linux环境下启动startup.cmd或startup.sh2、新建Sentinel8401模块pom<!-- API 通用pom根据自己情况而定--> <dependency> <groupId>com.sw</groupId> <artifactId>cloud-api-commons</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- Nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!-- openfign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>ymlserver: port: 8401 spring: application: name: cloud-alibaba-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 sentinel: transport: # sentinel dashboard地址 dashboard: localhost:8080 # 默认8719端口,如果8719被占用,默认递增 port: 8719 management: endpoints: web: exposure: include: '*'启动类@SpringBootApplication @EnableDiscoveryClient public class MainApp8401 { public static void main(String[] args) { SpringApplication.run(MainApp8401.class, args); } } controller@Slf4j @RestController public class FlowLimitController { @GetMapping("/testa") public String testA() { return "-----testA------"; } @GetMapping("/testb") public String testB() { log.info(Thread.currentThread().getName() + "\t" + "处理了/testb请求!"); return "-----testB------"; } }3、启动测试Sentinel默认的账号密码都是sentinel因为sentinel是懒加载机制,所以需先完成一次请求,才能在sentinel控制面板看到簇点链路
2021年04月29日
228 阅读
0 评论
0 点赞
2021-04-29
Nacos集群和持久化配置
Nacos默认使用嵌入式数据库实现数据存储,如果启动多个默认配置下的nacos节点,则存在数据一致性问题,为了解决这个问题,Nacos采用集中式存储来支持集群化部署,目前仅支持MySQl。三种部署方式单机 - 用于测试和单机试用集群 - 生产环境,确保高可用多集群 - 多用于数据中心等场景1、单机版1、在MySQl新建nacos_config数据库;2、运行conf文件夹下的nacos-mysql.sql,导入数据;3、修改conf文件夹下的application.properties,末尾添加以下内容,将数据库改为MySQlspring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=1234564、重启startup.cmd(nacos)之后,数据源就改为了自己的2、集群以Nginx作为vip,三个nacos节点为例1、下载Linux版Nacos2、新建nacos_config数据库3、修改数据源(同理单机版配置)4、修改cluster.conf,进去conf文件夹,执行以下命令,备份原文件cp cluster.conf.example cluster.conf运行hostname -i,查看主机名,此处以127.0.0.1为例(实际需替换为自己linux服务器执行hostname -i命令后的结果)在cluster.conf文件中添加127.0.0.1:3333 127.0.0.1:4444 127.0.0.1:55555、修改/bin/startup.sh文件在nohup $JAVA这一行添加-Dserver.port=${PORT}nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &注:新版的Nacos 2.0.0不需要添加case中的PORT,已自带# 为了方便使用,将2.0.0版本中的 EMBEDDED_STORAGE 改为了PORT while getopts ":m:f:s:c:p:" opt do case $opt in m) MODE=$OPTARG;; f) FUNCTION_MODE=$OPTARG;; s) SERVER=$OPTARG;; c) MEMBER_LIST=$OPTARG;; p) EMBEDDED_STORAGE=$OPTARG;; ?) echo "Unknown parameter" exit 1;; esac done6、Nginx配置# 通过1111端口反代三个Nginx集群 upstream cluster{ server 127.0.0.1:3333; server 127.0.0.1:4444; server 127.0.0.1:5555; } server { listen 1111; listen [::]:80 default_server; server_name localhost; #root /usr/share/nginx/html; # Load configuration files for the default server block. #include /etc/nginx/default.d/*.conf; location / { proxy_pass http://cluster; } 7、启动# 先启动Nacos节点 ./startup.sh -p 3333 ./startup.sh -p 4444 ./startup.sh -p 5555 # 再启动Nginx systemctl start nginx8、访问x.x.x.x:1111测试Nacos集群9、将微服务注册到Nacos集群修改yml配置文件的注册地址即可server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: x.x.x.x:1111 # Nginx反代的地址 management: endpoints: web: exposure: include: '*'
2021年04月29日
227 阅读
0 评论
0 点赞
2021-04-29
Nacos配置中心
使用nacos作为配置中心,在项目初始化时,要保证先从配置中心进行配置拉取,才能保证项目的正常启动1、创建配置中心模块pom<!-- Nacos discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- Nacos config --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>bootstarp.ymlserver: port: 3344 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: localhost:8848 file-extension: yaml # 指定配置文件为yaml格式 group: DEV_GROUP namespace: a06b3fe5-5be9-4e82-a56d-168afa4de85b # DataId格式 # ${spring.application.name}-${spring.profile.active}-${spring.cloud.nacos.config.file-extension} # nacos-config-client-dev.yamlapplication.ymlspring: profiles: #active: info #active: test active: dev启动类@SpringBootApplication @EnableDiscoveryClient public class NacosConfigClientMain3344 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3344.class, args); } }controller@RestController @RequestMapping("/config") @RefreshScope //支持Nacos的动态刷新 public class ConfigController { @Value("${config.info}") private String configInfo; @GetMapping("/info") public String getConfigInfo(){ return configInfo; } } 2、Nacos配置规则配置规则:即在客户端指定如何读取配置文件以及配置文件的命名规则默认命名规则:${prefix}-${spring.profile.active}.${file-extension} # prefix # 当前服务名称,也可以通过spring.cloud.nacos.config.prefix获取 # spring.profile.active # 当前指定的开发环境 # file-extension # 当前文件的格式,目前只支持yaml和properties注:DataId配置文件名必须遵循配置规则中的命名方式图片来源:尚硅谷 - 周阳 - Spring Cloud Alibaba补充nacos默认开启了自动刷新,更改配置文件,客户端读取的配置信息也随之改变(Nacos支持Bus消息总线,会自动发送命令更新信息)3、配置分类Namespace + Group + DataId1、配置不同的DataId# 通过yml配置读取指定的配置文件 spring: profiles: #active: info #active: test active: dev2、配置不同的GroupId3、配置不同的Namespace# 客户端yml配置不同的namespace server: port: 3344 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: localhost:8848 file-extension: yaml # 指定配置文件为yaml格式 group: DEV_GROUP namespace: a06b3fe5-5be9-4e82-a56d-168afa4de85b
2021年04月29日
97 阅读
0 评论
0 点赞
2021-04-29
Nacos CP、AP模式的选择
CP、AP模式选择1、如果不需要存储服务器级别的信息且服务实例通过nacos-client注册,并且能够保持心跳上报,就可以选择AP模式。AP模式为了可用性而减弱了一致性,因此AP模式下只支持注册临时实例2、如果需要在服务器级别编辑或存储配置信息,必须选CP模式(K8s和DNS服务适用于CP模式)。CP模式下支持注册持久化实例,此时是以Raft协议为集群运行模式,该模式下注册实例前必须先注册服务,如果服务不存在,则返回错误。切换模式curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
2021年04月29日
336 阅读
0 评论
0 点赞
2021-04-29
Nacos与其他注册中心对比
Nacos与其他注册中心对比 NacosEurekaConsulCoreDNSZookeeper一致性协议CP + APAPCP/CP健康检查TCP/HTTP/MySQL/Client BeatClient BeatTCP/HTTP/gRPC/Cmd/Client Beat负载均衡权重/DSL/metadata/CMDBRibbonFabioRR/雪崩保护支持支持不支持不支持不支持自动注销实例支持支持不支持不支持支持访问协议HTTP/DNS/UDPHTTPHTTP/DNSDNSTCP监听支持支持支持不支持支持多数据中心支持支持支持不支持不支持跨注册中心支持不支持支持不支持不支持Spring Cloud集成支持支持支持不支持不支持Dubbo集成支持不支持不支持不支持支持K8s集成支持不支持支持支持不支持
2021年04月29日
223 阅读
0 评论
0 点赞
2021-04-29
Nacos
服务注册和配置中心的组合:Nacos = Eureka + config + bus一、安装1、环境:java8、Mavennacos地址:https://github.com/alibaba/nacos2、启动# 注:单机启动,需修改bin目录下的startup.cmd为`standalone`模式 set MODE="standalone" set FUNCTION_MODE="all" set SERVER=nacos-server set MODE_INDEX=-1 set FUNCTION_MODE_INDEX=-1 set SERVER_INDEX=-1 set EMBEDDED_STORAGE_INDEX=-1 set EMBEDDED_STORAGE=""windows环境下,双击startup.cmd启动3、访问Nacos# nacos默认监听8848 # 默认账号:nacos,密码:nacos localhost:8848二、测试1、payment模块新建cloudalibaba-provider-payment9001、cloudalibaba-provider-payment9002两个模块pom<!-- Nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>ymlserver: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 management: endpoints: web: exposure: include: '*'主启动类@SpringBootApplication @EnableDiscoveryClient public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class, args); } }controller@RestController @RequestMapping("/payment") public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping("/nacos/{id}") public String getPayment(@PathVariable("id")int id){ return "nacos registry, serverPort: " + serverPort + "\t id: " + id; } }2、order模块pom同理paymentymlserver: port: 8088 spring: application: name: nacos-payment-consumer cloud: nacos: discovery: server-addr: localhost:8848 # 消费者将要去访问的微服务名称(注册进nacos的服务提供者) service-url: nacos-user-service: http://nacos-payment-provider主启动类@SpringBootApplication @EnableDiscoveryClient public class ConsumerMain80 { public static void main(String[] args) { SpringApplication.run(ConsumerMain80.class, args); } }config@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); } }controller@RestController @RequestMapping("/consumer") public class ConsumerController { @Autowired private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping("/payment/nacos/{id}") public String paymentInfo(@PathVariable("id")int id){ return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class); } }
2021年04月29日
127 阅读
0 评论
0 点赞
2021-04-29
Spring Cloud Stream
一、概述 Spring Cloud Stream 是一个构建消息驱动微服务的框架,应用程序通过inputs(生产者)或outputs(消费者)来与Spring Cloud Stream中binder对象交互,binder主要负责与消息中间件交互(开发人员只需操作Stream,而不用关心底层使用的是什么MQ)。注:目前仅支持RabbitMQ和kafka二、如何屏蔽底层差异在没有绑定器这个概念的情况下,SpringBoot应用在直接与消息中间件交互的时候,由于各MQ的设计初衷有不同,细节上存在较大的差异。通过定义绑定器作为中间层,完美的实现了应用程序与消息中间件细节之间的隔离;通过向应用程序暴露统一的channel频道,使得应用程序不需要再考虑各种MQ的实现。Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件(RabbitMQ<==>kafka),使得开发高度解耦,更加专注于自己的业务流程。Spring Cloud Stream处理架构三、通信模式Stream消息通信遵循发布-订阅模式Spring Cloud Stream的业务流程source:发布消息sink:接收消息图片来源:尚硅谷 - 周阳 - Spring Cloud Alibaba四、常用注解和API名称说明Middleware中间件Binder应用与消息中间件之间的封装,目前实现了RabbitMQ和Kafka的Binder,利用Binder可以很方便的连接MQ,可以动态的改变消息类型(RabbitMQ--exchange,Kafaka--topic),可以通过yml文件的配置来实现@Input输入@Output输出@StreamListener监听队列@EnableBinding绑定频道五、测试实例1、提供者pom<!-- stream rabbitmq --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> <!-- Eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>ymlserver: port: 8801 spring: application: name: cloud-stream-provider rabbitmq: host: x.x.x.x port: 5672 username: admin password: 123456 cloud: stream: binders: # 配置要绑定的rabbitmq的服务信息 defaultRabbit: # 定义的名称,用于binding整合 type: rabbit # 消息组件类型 bindings: # 服务整合处理 output: # 通道名称 destination: StreamExChange # 交换机的名字 content-type: application/json # 消息类型 binder: defaultRabbit # 设置要绑定的消息服务的具体设置 eureka: client: service-url: defaultZone: http://localhost:7001/eureka instance: lease-renewal-interval-in-seconds: 2 # 心跳时间间隔 lease-expiration-duration-in-seconds: 5 # 默认90s instance-id: send-8801.com # 在信息列表显示主机名称 prefer-ip-address: true # 访问路径显示ip 主启动类@SpringBootApplication public class StreamMQMain8801 { public static void main(String[] args) { SpringApplication.run(StreamMQMain8801.class, args); } }Service@EnableBinding(Source.class) //定义消息的推送通道 public class MessageProviderImpl implements MessageProvider { @Autowired private MessageChannel output; @Override public String send() { String serial = UUID.randomUUID().toString(); output.send(MessageBuilder.withPayload(serial).build()); System.out.println("======>" + serial); return null; } }controller@RestController public class SendMessageController { @Autowired private MessageProvider service; @GetMapping("/send") public String sendMessage(){ return service.send(); } }2、消费者==创建8802、8803两个消费者==pom同理消费者ymlserver: port: 8802 spring: application: name: cloud-stream-consumer rabbitmq: host: x.x.x.x port: 5672 username: admin password: 123456 cloud: stream: binders: # 配置要绑定的rabbitmq的服务信息 defaultRabbit: # 定义的名称,用于binding整合 type: rabbit # 消息组件类型 bindings: # 服务整合处理 input: # 通道名称 destination: StreamExChange # 交换机的名字 content-type: application/json # 消息类型 binder: defaultRabbit # 设置要绑定的消息服务的具体设置 group: GroupA8802 eureka: client: service-url: defaultZone: http://localhost:7001/eureka instance: lease-renewal-interval-in-seconds: 2 # 心跳时间间隔 lease-expiration-duration-in-seconds: 5 # 默认90s instance-id: recive-8802.com # 在信息列表显示主机名称 prefer-ip-address: true # 访问路径显示ip 启动类@SpringBootApplication public class StreamMQMain8802 { public static void main(String[] args) { SpringApplication.run(StreamMQMain8802.class, args); } }controller@Component @EnableBinding(Sink.class) public class ReciveController { @Value("${server.port}") private String serverPort; @StreamListener(Sink.INPUT) public void input(Message<String> msg){ System.out.println("消费者8802,接收到消息:" + msg.getPayload() + "\t serverPort:" + serverPort); } }六、重复消费的问题启动以上的测试实例,会发现8801生产者发送一条消息,8802、8803都收到了消息如何解决?通过将消费者分组来解决:即将原先GroupA8802、GroupA8803两个分组改为同一个分组GroupA注:在同一个分组中,多个消费者是竞争关系,这样就能保证消息只会被分组中的一个消费者消费server: port: 8802 spring: application: name: cloud-stream-consumer rabbitmq: host: x.x.x.x port: 5672 username: admin password: 123456 cloud: stream: binders: # 配置要绑定的rabbitmq的服务信息 defaultRabbit: # 定义的名称,用于binding整合 type: rabbit # 消息组件类型 bindings: # 服务整合处理 input: # 通道名称 destination: StreamExChange # 交换机的名字 content-type: application/json # 消息类型 binder: defaultRabbit # 设置要绑定的消息服务的具体设置 group: GroupA eureka: client: service-url: defaultZone: http://localhost:7001/eureka instance: lease-renewal-interval-in-seconds: 2 # 心跳时间间隔 lease-expiration-duration-in-seconds: 5 # 默认90s instance-id: recive-8802.com # 在信息列表显示主机名称 prefer-ip-address: true # 访问路径显示ip消息持久化问题在分组解决重复消费的问题是,分组同时也实现了消息的持久化
2021年04月29日
59 阅读
0 评论
0 点赞
2021-04-24
Sleuth分布式链路
Spring Cloud Sleuth提供了一套完整的服务跟踪解决方案,并且兼容支持zipkinTrace Id链路关系图片来源:尚硅谷-周阳 Spring CLoud AlibabaTrace:类似于树结构的span集合,表示一条调用链路,存在唯一标识span:表示调用链路来源(也就是一次请求信息)测试
2021年04月24日
47 阅读
0 评论
0 点赞
1
...
27
28
29
...
55