Spring Cloud

springcloud ribbon负载均衡

匆匆过客 提交于 2020-04-29 15:40:43
springcloud ribbon负载均衡 1.我们先启动上次建好的eureka、product服务 product服务要设置多个端口,将端口修改为9001,9011 启动后我们访问 http://localhost:9000/ 当我们用order服务去调用product服务时会发现,一会调用9001,一会调用9011,这就是ribbon的默认负载策略是轮询的方式,每个节点都访问一次。 修改ribbon负载均衡策略 ribbon有以下几种方式策略: 1. com.netflix.loadbalancer.RoundRobinRule :以轮询的方式进行负载均衡。 2.com.netflix.loadbalancer.RandomRule :随机策略 3.com.netflix.loadbalancer.RetryRule :重试策略。 4.com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越高的被调用的可能性越大。 5.com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实例,并返回请求数最小的实例返回。 6.com.netflix.loadbalancer.AvailabilityFilteringRule

spring security 原理+实战

一个人想着一个人 提交于 2020-04-29 14:43:26
<font size=3 face="黑体" > <font size=3 face="黑体" > 疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列 【 博客园总入口 】</font > <font size=3 face="黑体" > 架构师成长+面试必备之 高并发基础书籍 【 Netty Zookeeper Redis 高并发实战 】</font > 前言 Crazy-SpringCloud 微服务脚手架 &视频介绍 : Crazy-SpringCloud 微服务脚手架,是为 Java 微服务开发 入门者 准备的 学习和开发脚手架。并配有一系列的使用教程和视频,大致如下: 高并发 环境搭建 图文教程和演示视频,陆续上线: 中间件 链接地址 Linux Redis 安装(带视频) Linux Redis 安装(带视频) Linux Zookeeper 安装(带视频) Linux Zookeeper 安装, 带视频 Windows Redis 安装(带视频) Windows Redis 安装(带视频) RabbitMQ 离线安装(带视频) RabbitMQ 离线安装(带视频) ElasticSearch 安装, 带视频 ElasticSearch 安装, 带视频 Nacos 安装(带视频) Nacos 安装(带视频) Crazy-SpringCloud 微服务脚手架

Java码农必须掌握的循环删除List元素的正确方法!

半腔热情 提交于 2020-04-29 14:32:00
首先看下下面的各种删除list元素的例子 public static void main(String\[\] args) { List<String> list = new ArrayList<>(Arrays.asList("a1", "ab2", "a3", "ab4", "a5", "ab6", "a7", "ab8", "a9")); /** * 报错 * java.util.ConcurrentModificationException */ for (String str : list) { if (str.contains("b")) { list.remove(str); } } /** * 报错:下标越界 * java.lang.IndexOutOfBoundsException */ int size = list.size(); for (int i = 0; i < size; i++) { String str = list.get(i); if (str.contains("b")) { list.remove(i); } } /** * 正常删除,每次调用size方法,损耗性能,不推荐 */ for (int i = 0; i < list.size(); i++) { String str = list.get(i); if (str

API网关

回眸只為那壹抹淺笑 提交于 2020-04-29 14:21:23
API网关一般伴随着微服务架构出现,不同的微服务一般会有不同的网络地址,特别是每个微服务还会部署多份服务实例,外部客户端如果调用时一是如果需要三个微服务组合才能完成一次调用,客户端需要知道这三个微服务的地址,端口号等.有可能会出现如下问题: 客户端多次请求不同的微服务,增加了客户端的复杂性 存在跨域请求,在某些场景下处理相对复杂 认证复杂及重复,每个微服务都需要独立认证 重构困难,随着项目的迭代和产品的发展,可能需要重新划分微服务,如将多个微服务合并为一个或将一个微服务分拆为多个,此时客户端调用微服务时成本又会增加 有一些微服务可能放置于防火墙后或其他访问限制,直接访问会不可达 所以出现了API网关,它是介于客户端和服务端之间的桥梁,所有外部请求都会先给过网关层再路由到相应的微服务进行处理,根据这一特性我们一般会在网关层用来处理安全,性能,监控等通用的功能等,而不会用来处理业务逻辑. 网关的优势及选型 易于监控,认证 减少客户端与各个微服务之间的交互,直接和网关交互 网关技术选型 自研 Nginx衍生的Kong Netflex Zuul:zuul1,zuul2(闭源) Spring Cloud Gateway 下面我们主要以spring cloud gateway为例来讲网关. Spring cloud gateway包含spring 5,spring boot 2,project

StackOverflow 上面最流行的 7 个 Java 问题!

为君一笑 提交于 2020-04-29 13:10:20
StackOverflow发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。 这篇文章是在我们审阅了StackOverflow上最流行的 Java 问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。 一、分支预测 问题链接: https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array StackOverflow上最多投票的一个Java问题是: 为什么处理一个排序数组要比非排序数组快的多 。 为了回答这个问题,你需要使用分支预测(branch prediction)。分支预测是一种架构,旨在通过在真实的路径发生前猜测某一分支的下一步来提升处理过程。 分支在这里即一个if语句。这样的话,如果是一个排序数组,那么分支预测将会进行,否则不会进行。 StackOverflow上的一个回答者,链接: http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array

StackOverflow 上面最流行的 7 个 Java 问题!

大兔子大兔子 提交于 2020-04-29 12:38:15
StackOverflow发展到目前,已经成为了全球开发者的金矿。它能够帮助我们找到在各个领域遇到的问题的最有用的解决方案,同时我们也会从中学习到很多新的东西。 这篇文章是在我们审阅了StackOverflow上最流行的 Java 问题以及答案后从中挑出来的。即使你是一个有丰富经验的开发者,也能从中学到不少东西。 一、分支预测 问题链接: https://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array StackOverflow上最多投票的一个Java问题是: 为什么处理一个排序数组要比非排序数组快的多 。 为了回答这个问题,你需要使用分支预测(branch prediction)。分支预测是一种架构,旨在通过在真实的路径发生前猜测某一分支的下一步来提升处理过程。 分支在这里即一个if语句。这样的话,如果是一个排序数组,那么分支预测将会进行,否则不会进行。 StackOverflow上的一个回答者,链接: http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array

SpringCloud-Alibaba-Nacos 服务注册中心&配置中心

走远了吗. 提交于 2020-04-29 12:32:08
Spring Cloud Alibaba 由于 Spring Cloud Netflix 项目进入维护模式(将模块置于维护模式意味着 Spring Cloud 团队将不会再向模块中添加新功能,只会修复 block 级别的 bug 以及安全问题),阿里巴巴团队为我们提供了一套新的微服务开发一站式解决方案 详见官方介绍: https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md Nacos 概述 是什么? 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nocas 就是注册中心与配置中心的组合,可以替代 Eureka + Config + Bus 能干嘛? 替代 Eureka 做服务注册中心;替代 Config 做服务配置中心 下载、安装与运行 下载地址: https://github.com/alibaba/nacos/releases 下载解压后,打开 bin 目录,打开 cmd 窗口输入 startup.cmd 或者双击 startup.cmd 均可启动(Windows版) 浏览器地址栏输入 localhost:8848/nacos 登录,默认用户名密码都是 nacos,主页面如下: Nacos 作为注册中心 引入 Maven 依赖 <!-- nacos-discovery

14、Ribbon整合断路器监控Hystrix Dashboard

依然范特西╮ 提交于 2020-04-29 10:15:23
上一篇只是大概介绍了一下断路器 Hystrix Dashboard 监控,如何使用 Hystrix Dashboard 监控微服务的状态呢?这篇看看 Ribbon 如何整合断路器监控 Hystrix Dashboard 。今天的项目主要整合 sc-eureka-client-consumer-ribbon-hystrix项目和sc-hystrix-dashboard项目 1、 新建项目sc-ribbon-hystrix-dashboard ,对应的 pom.xml 文件 <project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion>4.0.0</modelVersion> <groupId>spring-cloud</groupId> <artifactId> sc -ribbon- hystrix - dashboard </artifactId> <version>0.0.1-SNAPSHOT<

JAVA元注解@interface详解

偶尔善良 提交于 2020-04-29 10:11:28
jdk1.5起开始提供了4个元注解,用来定义自定义注解的注解,它们分别是: @Target 指定注解使用的目标范围(类、方法、字段等),其参考值见类的定义:java.lang.annotation.ElementType @Documented 指定被标注的注解会包含在javadoc中。 @Retention 指定注解的生命周期(源码、class文件、运行时),其参考值见类的定义:java.lang.annotation.RetentionPolicy @Inherited 指定子类可以继承父类的注解,只能是类上的注解,方法和字段的注解不能继承。即如果父类上的注解是@Inherited修饰的就能被子类继承。 jdk1.8又提供了以下两个元注解 @Native 指定字段是一个常量,其值引用native code。 @Repeatable 注解上可以使用重复注解,即可以在一个地方可以重复使用同一个注解,像spring中的包扫描注解就使用了这个。 所有元注解定义在java.lang.annotation包下面 其中Annotation是注解的基本接口,所有的注解都继承这个接口。 看下@Autowired注解的实现 其实就是继承了Annotation接口。 了解了jdk对注解的定义,所以想要自定义一个注解就以@interface开始吧。 推荐去我的博客阅读更多: 1. Java JVM

微服务全链路跟踪:jaeger集成hystrix

。_饼干妹妹 提交于 2020-04-29 00:38:04
微服务全链路跟踪:grpc集成zipkin 微服务全链路跟踪:grpc集成jaeger 微服务全链路跟踪:springcloud集成jaeger 微服务全链路跟踪:jaeger集成istio,并兼容uber-trace-id与b3 微服务全链路跟踪:jaeger集成hystrix 背景 > 当springcloud服务集成hystrix,并且用了hystrixCommend注解到方法上时,jaeger链路会断掉 方案 在网上搜索到了大量jaeger遇到多线程时的处理方式,都是包装线程池来做到ThreadLocal传递,有很多都用到了阿里开源的 transmittable-thread-local 。 下面说一下当集成hystrix时,jaeger链路丢失问题,大家都知道hystrix默认是线程池隔离,所以归根结底还是遇到多线程线程变量没有共享的问题,网上也罗列了几种方案: 方案一:变更隔离方式 hystrix.command.default.execution.isolation.strategy: SEMAPHORE 当并发高时这里设置信号量隔离是有风险的,可以根据情况优化断路器配置来降低风险 方案二:自定义隔离策略 隔离策略官方文档有定义: 原先我就定义了一个feign传递request中header信息的策略,在原有的隔离策略下面参考 https://github.com