SpringCloud

Posted cye9971-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动,或销毁,拥有自己独立的数据库。

微服务的架构:是一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值,每个服务运行在其独立的进程中

每个服务围绕着具体业务进行构建,并且能够被独立的部署到生产环境,应当尽量避免统一的,集中式的服务管理机制

针对具体的一个服务而言,应根据业务上下文选择合适的语言,工具对其进行构建。 

微服务优点:足够内聚,足够小,代码容易理解,一个服务负责一个业务

                           能够被小团队单独开发

                           松耦合

                           用不同的语言开发

                           易于和第三方集成

微服务只是业务逻辑的代码,不会和html,css或其他界面组件混合

每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库

缺点:开发人员要处理分布式系统的复杂性 

          多服务运维难度

           系统部署依赖

            服务间的通信成本

             数据一致性

            系统集成测试

            性能监控

阿里 dubbo  京东 JSF 新浪微博Motan  当当网dubbo

 

dubbo和springCloud对比

 

Dubbo

SpringCloud

服务注册中心

Zookeeper

SpringCloud Netflix eureka

服务调用方式

RPC

REST API

服务监控

Dubbo-monitor

SpringBoot Admin

断路器

不完善

SpringCloud Netflix Hystrix

服务网关

SpringCloud netfix  Zuu

分布式配置

SpringCloud Config

服务跟踪

SpringCloud Sleuth

消息总线

SpringCloud Bus

数据流

SpringCloud Stream

批量服务

SpringCloud Task

dubbo可以满足企业的需求,但是更好的东西,大家更愿意去使用(Spring cloud)

最大区别:SpringCloud抛弃了Dubbo的rpc通信,采用的是基于HTTP的REST方式

SpringCloud基于SpringBoot提供了一套服务解决方案,包括服务注册中心与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于Netflix的开源组件做高度抽象封装

SpringBoot提供了一套简单易懂、易部署和易维护的分布式系统开发工具

SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,( 微服务全家桶)

SpringBoot专注于快速方便的开发单个个体微服务

SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务质检提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选

SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系(SpringCloud依赖于SpringBoot)

SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架

 

技术图片

技术图片

一个Project带着多个Module子模块

Txservicecloud父工程(Project)下初次带着3个子模块(Module)

txservicecloud-common封装的整体entity接口/公共配置

txservicecloud-provider-dept-8001  微服务落地的服务提供者

txservicecloud-consumer-dept-80   微服务调用的客户端使用

@SpringBootApplication

@RequestMapping

@Autowired

@Configuration

@RestController

@Bean

@RestTemplate:Spring访问的一种模板,注入mvc容器中

@EnableEurekaService

@EnableEureKaClient

Eureka是NetFlix的一个子模块,也是核心模块,EureKa是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现 和故障转移

只需要使用服务的标识符,就可以访问到服务(dubbo的注册中心,zookeeper)

 SpringCloud封装了Netflix公司开发的EureKa模块来实现服务注册和发现

EureKa采用C-S的设计架构,EureKaServer作为服务注册功能的服务器,服务注册中心

EureKa包含两个组件:EureKa Server和EureKa Client

EureKa Server提供服务注册服务

各个节点启动后,会EureKa Server中进行注册;EureKa Server中的服务注册表中将会存储所有可用服务节点的信息

EureKa Server 提供服务注册和发现

Service Provider服务提供方将自身服务注册到EureKa,从而使服务消费方能够找到

Service  Consumer服务消费方从EureKa获取注册服务列表,从而能够消费

.yml配置文件

server:

  port: 8888

eureka:

  instance:

   hostname:localhost

client:

    register-with-eureka:false

   fetch-registry:false

   service-url:

    defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

 

eureka:

      client:

         service-url:

            defaultZone:http://localhost:7001/eureka/

instance:

       instance-id:txservicecloud-dep-8001

       prefer-ip-address:true

 

 

加入Actuator依赖:

        <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-actuator</artifactId>

        </dependency>

<build>

                   <finalName>txservicecloud</finalName>

                        <resources>

                                     <resource>

                                   <directory>src/main/resources</directory>

                                   <filtering>true</filtering>

                               </resource>

                          </resources>

                          <plugins>

                                <plugin>

                                  <groupId>org.apache.maven.plugins</groupId>

                                  <artifactId>maven-resources-plugin</artifactId>

                                  <configuration>

                                         <delimiters>

                                              <delimit>@</delimit>

                                            </delimiters>

                                   </configuration>

                                  </plugin>

                              </plugins>

</build>

 

因为微服务本身其实使健康的,此时本不应该注销这个微服务

Eureka通过“自我保护模式”

Eureka集群配置,就是多个Eureka进行配置,然后一起工作

改端口,改yml配置文件

 

如何包含Eureka客户端

要在您的项目中包含Eureka客户端,使用组org.springframework.cloud和工件id spring-cloud-starter-eureka的启动器。有关 使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面

注册Eureka

当客户端注册Eureka时,它提供有关自身的元数据,例如主机和端口,运行状况指示符URL,主页等。Eureka从属于服务的每个实例接收心跳消息。如果心跳失败超过可配置的时间表,则通常将该实例从注册表中删除。

示例eureka客户端:

@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableEurekaClient
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

(即完全正常的Spring Boot应用程序)。在这个例子中,我们明确地使用@EnableEurekaClient,但只有Eureka可用,你也可以使用@EnableDiscoveryClient。需要配置才能找到Eureka服务器。例:

application.yml
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

其中“defaultZone”是一个魔术字符串后备值,为任何不表示首选项的客户端提供服务URL(即它是有用的默认值)。

Environment获取的默认应用程序名称(服务ID),虚拟主机和非安全端口分别为${spring.application.name}${spring.application.name}${server.port}

@EnableEurekaClient使应用程序成为Eureka“实例”(即注册自身)和“客户端”(即它可以查询注册表以查找其他服务)。实例行为由eureka.instance.*配置键驱动,但如果您确保您的应用程序具有spring.application.name(这是Eureka服务标识或VIP的默认值),那么默认值将会很好。

有关可配置选项的更多详细信息,请参阅EurekaInstanceConfigBeanEurekaClientConfigBean

使用Eureka服务器进行身份验证

如果其中一个eureka.client.serviceUrl.defaultZone URL中包含一个凭据(如http://user:[email protected]:8761/eureka)),HTTP基本身份验证将自动添加到您的eureka客户端。对于更复杂的需求,您可以创建@Bean类型DiscoveryClientOptionalArgs并注入ClientFilter实例,所有这些都将应用于从客户端到服务器的调用。

---恢复内容结束---

以上是关于SpringCloud的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法

SpringCloud环境搭建服务提供者 我们需要拿到实体类,所以要配置api module, 在这时报错

springcloud项目多个微服务中,jwt鉴权的代码应该放在哪个服务中?

微信小程序代码片段

VSCode自定义代码片段——CSS选择器