关于spring-cloud-alibaba:快速搭建-SpringCloud-Alibaba-Nacos-配置中心

Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官网收录。而 Nacos 作为 Spring Cloud Alibaba 的外围组件之一,提供了两个十分重要的性能:服务注册核心(服务注册和发现)性能,和对立配置核心性能。 Nacos 简介Nacos 致力于帮忙开发者发现、配置和治理微服务。它提供了一组简略易用的个性集,帮忙开发者疾速实现动静服务发现、服务配置、服务元数据及流量治理。 Nacos 个性介绍Nacos 具备以下个性: 服务发现和服务衰弱监测:反对基于DNS和基于RPC的服务发现,反对对服务的实时的健康检查,阻止向不衰弱的主机或服务实例发送申请。动静配置服务:动静配置服务能够让您以中心化、内部化和动态化的形式治理所有环境的利用配置和服务配置。动静 DNS 服务:动静 DNS 服务反对权重路由,让您更容易地实现中间层负载平衡、更灵便的路由策略、流量管制以及数据中心内网的简略 DNS 解析服务。服务及其元数据管理:反对从微服务平台建设的视角治理数据中心的所有服务及元数据。配置核心性能实现1.增加依赖创立一个新的 Spring Boot 我的项目,增加 nacos config 和 web(非必须)框架依赖,如下图所示: PS:增加 web 依赖次要作用是为了不便前面代码测试。如果是老我的项目,那么须要手动增加 nacos config 的依赖,批改 pom.xml 文件,增加以下内容: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>2.配置 Nacos Config 信息在利用的 /src/main/resources/ 目录下,创立疏导配置文件 bootstrap.yml(或 bootstrap.properties),增加以下 Nacos Config 配置信息: spring: application: name: nacosconfig # 项目名称和 nacos DataId 相匹配 cloud: nacos: config: server-addr: 127.0.0.1:8848 # nacos 地址和端口 file-extension: yaml # 获取配置文件的格局:yaml username: nacos # nacos 认证用户名 password: nacos # nacos 认证明码server: port: 9001 # 我的项目启动端口3.编写代码读取配置文件创立一个控制器,应用 @Value 注解读取配置信息,读取形式和 Spring Boot 读取本地配置代码统一: ...

August 28, 2022 · 2 min · jiezi

关于spring-cloud-alibaba:Spring-Cloud-Stream多消费端只有一个实例在消费

环境及景象应用的是spring cloud stream + kafka的技术栈。 # kafka连贯配置spring.cloud.stream.binders.common.type=kafkaspring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.brokers=192.168.110.110:9092spring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.zk-nodes=192.168.110.110:2181# 生产端配置spring.cloud.stream.bindings.input.binder=commonspring.cloud.stream.bindings.input.destination=test-issuespring.cloud.stream.bindings.input.group=group0spring.cloud.stream.bindings.input.content-type=text/plain# kafka连贯配置spring.cloud.stream.binders.common.type=kafkaspring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.brokers=192.168.110.110:9092spring.cloud.stream.binders.common.environment.spring.cloud.stream.kafka.binder.zk-nodes=192.168.110.110:2181# 生产端配置spring.cloud.stream.bindings.output.binder=commonspring.cloud.stream.bindings.output.destination=test-issuespring.cloud.stream.bindings.output.content-type=text/plain以后kafka是单机部署的,topic由stream主动创立,启动一个生产端,和两个生产端实例。后果只有一个在生产!!!其中一个在生产另一个报错 解决方案其实问题在于对kafka的机制不够理解,kafka里有个partition的概念,而且默认都是单播模式的,索引呢对于生产端而言,一个生产端会独享一个partition。 所以问题就出在这个partition上了,因为是单机部署,topic由stream主动创立并且没有指定partition,那么这时我在查看topic的partition时发现只有一个partition,又因为一个生产端会独享一个partition那么就造成了当初的问题只有一个生产端在生产。 解决办法也很简略,只有创立多个partition即可。 # 生产者配置,生产荡涤后的CDRspring.cloud.stream.bindings.output.binder=commonspring.cloud.stream.bindings.output.destination=test-issuespring.cloud.stream.bindings.output.content-type=text/plainspring.cloud.stream.bindings.output.producer.partition-count=2

June 28, 2022 · 1 min · jiezi

关于spring-cloud-alibaba:openFeign夺命连环9问

1、前言后面介绍了Spring Cloud 中的灵魂摆渡者Nacos,和它的前辈们相比不仅仅功能强大,而且部署非常简单。 明天介绍一款服务调用的组件:OpenFeign,同样是一款超过先辈(Ribbon、Feign)的狠角色。 文章目录如下: 2、Feign是什么?Feign也是一个狠角色,Feign旨在使得Java Http客户端变得更容易。 Feign集成了Ribbon、RestTemplate实现了负载平衡的执行Http调用,只不过对原有的形式(Ribbon+RestTemplate)进行了封装,开发者不用手动应用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可实现服务调用,这样更加合乎面向接口编程的主旨,简化了开发。 但遗憾的是Feign当初进行迭代了,当然当初也是有不少企业在用。 有想要学习Feign的读者能够上spring Cloud官网学习,陈某这里也不再具体介绍了,不是明天的重点。 3、openFeign是什么?后面介绍过进行迭代的Feign,简略点来说:OpenFeign是springcloud在Feign的根底上反对了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient能够解析SpringMVC的@RequestMapping注解下的接口,并通过动静代理的形式产生实现类,实现类中做负载平衡并调用其余服务。 官网地址:https://docs.spring.io/spring...4、Feign和openFeign有什么区别?FeignopenFiegnFeign是SpringCloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载平衡,去调用服务注册核心的服务。Feign的应用形式是:应用Feign的注解定义接口,调用这个接口,就能够调用服务注册核心的服务OpenFeign 是SpringCloud在Feign的根底上反对了SpringMVC的注解,如@RequestMapping等。OpenFeign 的@FeignClient能够解析SpringMVC的@RequestMapping注解下的接口,并通过动静代理的形式产生实现类,实现类中做负载平衡并调用其余服务。5、环境筹备本篇文章Spring Cloud版本、JDK环境、我的项目环境均和上一篇Nacos的环境雷同:五十五张图通知你微服务的灵魂摆渡者Nacos到底有多强?。 注册核心就不再应用Eureka了,间接应用Nacos作为注册和配置核心,有不会的能够查看Nacos文章。 本篇文章搭建的我的项目构造如下图: 注册核心应用Nacos,创立个微服务,别离为服务提供者Produce,服务消费者Consumer。6、创立服务提供者既然是微服务之间的互相调用,那么肯定会有服务提供者了,创立openFeign-provider9005,注册进入Nacos中,配置如下: server: port: 9005spring: application: ## 指定服务名称,在nacos中的名字 name: openFeign-provider cloud: nacos: discovery: # nacos的服务地址,nacos-server中IP地址:端口号 server-addr: 127.0.0.1:8848management: endpoints: web: exposure: ## yml文件中存在特殊字符,必须用单引号蕴含,否则启动报错 include: '*'留神:此处的spring.application.name指定的名称将会在openFeign接口调用中应用。 我的项目源码都会上传,对于如何注册进入Nacos,增加什么依赖源码都会有,联合陈某上篇Nacos文章,这都不是难事!7、创立服务消费者新建一个模块openFeign-consumer9006作为消费者服务,步骤如下。 1、增加依赖除了Nacos的注册核心的依赖,还要增加openFeign的依赖,如下: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>2、增加注解@EnableFeignClients开启openFeign性能老套路了,在Spring boot 主启动类上增加一个注解@EnableFeignClients,开启openFeign性能,如下: @SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class OpenFeignConsumer9006Application{ public static void main(String[] args) { SpringApplication.run(OpenFeignConsumer9006Application.class, args); }}3、新建openFeign接口新建一个openFeign接口,应用@FeignClient注解标注,如下: @FeignClient(value = "openFeign-provider")public interface OpenFeignService {}留神:该注解@FeignClient中的value属性指定了服务提供者在nacos注册核心的服务名。4、新建一个Controller调试新建一个controller用来调试接口,间接调用openFeign的接口,如下: ...

January 5, 2022 · 2 min · jiezi

关于spring-cloud-alibaba:妹子始终没搞懂OAuth20今天整合Spring-Cloud-Security-一次说明白

大家好,我是不才陈某~ 周二发了Spring Security 系列第一篇文章,有妹子留言说看了很多文章,始终没明确OAuth2.0,这次陈某花了两天工夫,整顿了OAuth2.0相干的常识,联合认证受权服务+资源服务,一次性给大家唠明确! 这是《Spring Security 进阶》第2篇文章,往期文章如下: 实战!Spring Boot Security+JWT前后端拆散架构登录认证!本篇文章介绍一下OAuth2.0相干的知识点,并且手把手带大家搭建一个认证受权核心、资源服务进行OAuth2.0四种受权模式的验证,案例源码具体,一梭子带大家理解分明。 本篇文章的案例源码我的项目架构为:Spring Boot + Spring Cloud Alibaba + Spring Security ,Spring Cloud Alibaba有不理解能够看下陈某的往期《Spring Cloud 进阶》文章: 五十五张图通知你微服务的灵魂摆渡者Nacos到底有多强?openFeign夺命连环9问,这谁受得了?阿里面试这样问:Nacos、Apollo、Config配置核心如何选型?这10个维度通知你!阿里面试败北:5种微服务注册核心如何选型?这几个维度通知你!阿里限流神器Sentinel夺命连环 17 问?比照7种分布式事务计划,还是偏爱阿里开源的Seata,真香!(原理+实战)Spring Cloud Gateway夺命连环10问?Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!分布式链路追踪之Spring Cloud Sleuth夺命连环9问?3本书了,7万+字,10篇文章,《Spring Cloud 进阶》根底版 PDF文章目录如下: 为什么须要OAuth2.0?编码永远都是为了解决生产中的问题,想要了解为什么须要OAuth2,当然要从理论生存登程。 举个例子:小区的业主点了一份外卖,然而小区的门禁系统不给外卖人员进入,此时想要外卖员进入只能业主下来开门或者告知门禁的明码。 明码告知外卖员岂不是每次都能凭明码进入小区了,这显著造成了安全隐患。 那么有没有一种计划:既能不泄露明码,也能让外卖小哥进入呢? 于是此时就想到了一个受权机制,分为以下几个步骤: 门禁系统中新增一个受权按钮,外卖小哥只须要点击受权按钮呼叫对应业主业主收到小哥的呼叫,晓得小哥正在要求受权,于是做出了应答受权此时门禁系统弹出一个明码(相似于access_token),有效期30分钟,在30分钟内,小哥能够凭借这个明码进入小区。小哥输出明码进入小区另外这个受权的明码不仅能够通过门禁,还能够通过楼下的门禁,这就十分相似于网关和微服务了。 令牌和明码的区别?上述例子中令牌和明码的作用是一样的,都能够进入小区,然而存在以下几点差别: 时效不同:令牌个别都是存在过期工夫的,比方30分钟后生效,这个是无奈批改的,除非从新申请受权;而明码个别都是永恒的,除非客人去批改权限不同:令牌的权限是无限的,比方上述例子中,小哥获取了令牌,可能关上小区的门禁、业主所在的楼下门禁,然而可能无奈关上其它幢的门禁;令牌能够撤销:业主能够撤销这个令牌的受权,一旦撤销了,这个令牌也就生效了,无奈应用;然而明码个别不容许撤销。什么是OAuth2?OAuth 是一个凋谢规范,该规范容许用户让第三方利用拜访该用户在某一网站上存储的私密资源(如头像、照片、视频等),而在这个过程中无需将用户名和明码提供给第三方利用。实现这一性能是通过提供一个令牌(token),而不是用户名和明码来拜访他们寄存在特定服务提供者的数据。 采纳令牌(token)的形式能够让用户灵便的对第三方利用受权或者发出权限。 OAuth2 是 OAuth 协定的下一版本,但不向下兼容 OAuth 1.0。 传统的 Web 开发登录认证个别都是基于 session 的,然而在前后端拆散的架构中持续应用 session 就会有许多不便,因为挪动端(Android、iOS、微信小程序等)要么不反对 cookie(微信小程序),要么应用十分不便,对于这些问题,应用 OAuth2 认证都能解决。 对于大家而言,咱们在互联网利用中最常见的 OAuth2 应该就是各种第三方登录了,例如 QQ 受权登录、微信受权登录、微博受权登录、GitHub 受权登录等等。 ...

December 14, 2021 · 2 min · jiezi

关于spring-cloud-alibaba:Spring-Cloud-Alibaba-微服务架构实战

download:Spring Cloud / Alibaba 微服务架构实战public class Sort { public static <AnyType extends Comparable<? super AnyType>> void insertionSort(AnyType[] a) { insertionSort(a, 0, a.length - 1);} private static <AnyType extends Comparable<? super AnyType>> void insertionSort(AnyType[] a, int left, int right) { int j; // 记录第一个比tmp小的元素的后边一位的地位for (int p = left; p <= right; p++) { AnyType tmp = a[p]; for (j = p; j > left && tmp.compareTo(a[j - 1]) < 0; j--) { a[j] = a[j - 1]; } a[j] = tmp;}} ...

August 11, 2021 · 3 min · jiezi

关于spring-cloud-alibaba:03篇-Nacos-Client服务发现源码分析

学习不必那么功利,二师兄带你从更高维度轻松浏览源码~本篇带大家通过源码层面剖析一下Nacos Client的服务发现的途程,事实可能并不像你设想的那样简略。 Nacos服务发现直观的看,Nacos客户端的服务发现,就是封装参数、调用服务端接口、取得返回实例列表。 但细化这个流程,会发现不仅包含了通过NamingService获取服务列表,在获取服务列表的过程中还波及到通信协议(Http or gRPC)、订阅流程、故障转移逻辑等。上面咱们依据服务发现来捋一下相干的流程。 先说入口程序,仍旧是在NamingTest中能够看到: NamingService namingService = NacosFactory.createNamingService(properties);namingService.registerInstance("nacos.test.1", instance);ThreadUtils.sleep(5000L);// 获取实例列表List<Instance> list = namingService.getAllInstances("nacos.test.1");对于NamingService的实例化和基本功能,在服务注册时曾经讲过,这里间接看获取实例列表办法getAllInstances。该办法的参数就是服务的名称。 通过一些列的重载办法调用,真正解决外围逻辑的办法如下: @Overridepublic List<Instance> getAllInstances(String serviceName, String groupName, List<String> clusters, boolean subscribe) throws NacosException { ServiceInfo serviceInfo; String clusterString = StringUtils.join(clusters, ","); // 是否订阅模式 if (subscribe) { // 先从客户端缓存获取服务信息 serviceInfo = serviceInfoHolder.getServiceInfo(serviceName, groupName, clusterString); if (null == serviceInfo) { // 如果本地缓存不存在服务信息,则进行订阅 serviceInfo = clientProxy.subscribe(serviceName, groupName, clusterString); } } else { // 如果未订阅服务信息,则间接从服务器进行查问 serviceInfo = clientProxy.queryInstancesOfService(serviceName, groupName, clusterString, 0, false); } // 从服务信息中获去实例列表 List<Instance> list; if (serviceInfo == null || CollectionUtils.isEmpty(list = serviceInfo.getHosts())) { return new ArrayList<Instance>(); } return list;}首先看重载的getAllInstances办法,比入口办法多了几个参数,这里不仅有服务名称,还有分组名称(groupName)、集群列表(clusters)、是否订阅(subscribe)。 ...

August 10, 2021 · 1 min · jiezi

关于spring-cloud-alibaba:Spring-Cloud-Alibaba整合Nacos

Nacos是阿里巴巴开发的用于发现、配置和治理微服务。与Spring Cloud Alibaba完满联合。Nacos 提供了一组简略易用的个性集,帮忙您疾速实现动静服务发现、服务配置、服务元数据及流量治理。Nacos是国产的,所以中文文档也很丰盛。 启动配置管理引入依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.5.RELEASE</version> </dependency> </dependencies> <!-- SpringCloud依赖,起到治理版本的作用 --> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${com-alibaba-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>配置在利用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据 spring.application.name=spring-cloud-alibaba-nacos-config-examplespring.cloud.nacos.config.server-addr=127.0.0.1:8848须要先启动Nacos,否则启动后会有些报错 实现上述两步后,利用会从 Nacos Config 中获取相应的配置,并增加在 Spring Environment 的 PropertySources 中。这里咱们应用 @Value 注解来将对应的配置注入到 SampleController 的 userName 和 age 字段,并增加 @RefreshScope 关上动静刷新性能 @RefreshScope class SampleController { @Value("${user.name}") String userName; @Value("${user.age}") int age; }启动 Nacos Server 并增加配置下载NacosGitHub地址:https://github.com/alibaba/nacos/releases ...

June 29, 2021 · 2 min · jiezi

关于spring-cloud-alibaba:Spring-Cloud-Alibaba五Nacos服务配置中心

Nacos作为服务配置核心时,服务端是网页版,新建配置。客户端,即利用,引入依赖,并增加相干配置。 再开始之前,将分享一段没有用配置核心的经验。 公司安顿我负责一个医院的对立领取平台的我的项目。刚开始想着简略吧,不弄配置核心了,还要保护,麻烦。然而实际上,如果要批改配置,须要经验批改配置文件,而后打包,上传jar(因为是内网),而后是运维的共事负责部署工作。每次须要改个配置,都须要将下面的流程残缺走一遍。有一天,切实是受不了了,弄了Nacos配置核心。如果再须要改配置,只须要再配置核心改了,而后再重启服务就能够了。 Nacos配置核心,分为服务端和客户端。 上面分为服务端和客户端,别离具体的给搭建演示。 1 服务端1.1 新建配置 1.2 配置列表 1.3 配置详情 2 客户端2.1 依赖<!-- nacos 服务配置 --><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>2.2 主动配置package com.fengwenyi.demouserservicecore.config;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.Configuration;/** * @author <a href="https://www.fengwenyi.com">Erwin Feng</a> */@EnableAutoConfiguration@Configurationpublic class AutoConfigConfiguration {}2.3 配置spring.application.name=demo-user-service-corespring.profiles.active=devspring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.file-extension=yamlspring.cloud.nacos.config.group=springcloud-alibaba-demo指定的配置文件名为 demo-user-service-core-dev.ymal 。 材料springcloud-alibaba-demo

May 12, 2021 · 1 min · jiezi

关于spring-cloud-alibaba:Spring-Cloud-Alibaba四Nacos服务注册与发现

微服务的终点就是服务注册与发现,Spring Cloud Alibaba系列将应用Nacos作为服务注册与发现。 本节次要以nacos-server 1.4.1版本进行演示。 1 服务端1.1 下载 nacos-serverhttps://download.csdn.net/dow... 1.2 启动服务以Mac为例,演示。 进入到 nacos/bin 目录。 启动命令: sh startup.sh -m standalone1.3 治理平台地址:http://localhost:8848/nacos 默认账号:nacos 默认明码:nacos 1.4 进行服务以Mac为例,演示。 进入到 nacos/bin 目录。 启动命令: sh shutdown.sh1.5 界面截图 2 客户端2.1 依赖<!-- nacos 服务注册 --><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>2.2 主动配置/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.fengwenyi.demouserservicecore.config;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.context.annotation.Configuration;/** * @author <a href="mailto:chenxilzx1@gmail.com">theonefx</a> */@EnableDiscoveryClient@Configurationpublic class NacosDiscoveryConfiguration {}2.3 配置spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.cloud.nacos.discovery.group=springcloud-alibaba-demo2.4 界面截图 ...

April 28, 2021 · 1 min · jiezi