第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

SpringCloud微服務(wù)入門(mén)教程

概述

本文介绍了SpringCloud微服务入门的相关知识,包括微服务的概念、SpringCloud的简介及其优势和应用场景。文章还详细讲解了开发环境搭建、创建第一个SpringCloud微服务应用、服务注册与发现、服务调用与负载均衡以及服务配置与共享等步骤。

SpringCloud微服务入门教程
SpringCloud微服务简介

微服务的概念

微服务是一种软件架构风格,它将一个大型的单体应用程序拆分为一组小型的、可独立部署的服务。每个微服务负责一个特定的功能,通过定义良好的API接口进行通信。这种架构风格强调了服务的独立性、松耦合性以及轻量级通信,使得系统更加灵活、易于扩展和维护。

SpringCloud的简介

SpringCloud是基于SpringBoot实现的一套微服务架构工具,它提供了多种组件和库,用于构建和集成微服务应用。SpringCloud的核心理念是基于SpringBoot的约定优于配置的思想,通过提供一系列的工具来简化开发过程,帮助开发者快速构建可靠、可扩展的微服务应用。SpringCloud的核心模块包括服务注册与发现、配置中心、服务网关、负载均衡、服务容错等。

SpringCloud的优势和应用场景

优势

  1. 降低复杂度:SpringCloud封装了大量的微服务架构中常见的问题,如服务治理、配置管理等,使得开发者可以专注于业务逻辑的实现。
  2. 快速开发:基于SpringBoot的快速开发特性,SpringCloud可以帮助团队快速搭建起微服务系统。
  3. 易于维护:微服务架构将大型应用拆分为小型服务,每个服务都相对独立,这使得系统更容易维护和升级。
  4. 弹性扩展:每个服务都可以独立部署和扩展,这使得系统能够更好地应对不同的负载需求。
  5. 松耦合性:服务间通过API接口进行通信,降低了服务间的依赖性和耦合度。

应用场景

  1. 电商网站:可以将订单系统、支付系统、库存系统等拆分为独立的服务,每个服务可以独立部署和扩展。
  2. 互联网金融:可以将不同的金融业务拆分为独立的服务,如信贷系统、投资系统、支付系统等。
  3. 企业应用:企业内部的ERP、CRM等系统可以被拆分为多个微服务,每个服务针对一个具体的功能模块。
  4. 数据分析:大数据分析应用中的数据采集、预处理、分析、可视化等可以拆分为多个独立的服务,每个服务专注于一个特定的任务。
开发环境搭建

安装Java开发环境

安装Java

首先需要安装JDK(Java Development Kit)。可以从Oracle官网或OpenJDK下载最新版本的JDK。这里以OpenJDK为例,其安装步骤如下:

  1. 访问OpenJDK官网。
  2. 下载最新的OpenJDK版本。
  3. 解压下载的文件到指定目录。
  4. 设置JAVA_HOME环境变量,指向解压后的目录。
  5. 将JAVA_HOME/bin目录添加到PATH环境变量中。

示例代码:

# 设置JAVA_HOME环境变量
export JAVA_HOME=/path/to/jdk

# 将Java的bin目录添加到PATH环境变量中
export PATH=$JAVA_HOME/bin:$PATH

安装IDE(如IntelliJ IDEA或Eclipse)

这里以IntelliJ IDEA和Eclipse为例进行说明。

安装IntelliJ IDEA
  1. 访问IntelliJ IDEA官网。
  2. 下载IDEA的Community版本(免费)。
  3. 安装IDEA并启动。
  4. 配置IDEA,安装必要的插件,如Spring Boot的支持插件。
  5. 新建一个Spring Boot项目,开始开发。
安装Eclipse
  1. 访问Eclipse官网。
  2. 下载Eclipse的Eclipse IDE for Enterprise Java Developers版本。
  3. 安装Eclipse并启动。
  4. 配置Eclipse,安装必要的插件,如Spring Tools Suite(STS)插件。
  5. 新建一个Spring Boot项目,开始开发。

下载并配置SpringBoot和SpringCloud

下载SpringBoot和SpringCloud

  1. 访问Spring Boot官网。
  2. 下载Spring Boot的最新版本。
  3. 访问Spring Cloud官网。
  4. 下载Spring Cloud的最新版本。

在项目中引入SpringBoot和SpringCloud依赖

在Spring Boot项目中引入Spring Cloud依赖,需要修改pom.xml文件(如果使用Maven)或者build.gradle文件(如果使用Gradle)。

示例代码(Maven):

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

示例代码(Gradle):

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}

dependencyManagement {
    imports {
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:2021.0.0'
    }
}
创建第一个SpringCloud微服务应用

项目结构介绍

一个典型的Spring Cloud项目结构如下:

spring-cloud-example/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── springcloud/
│   │   │               ├── Application.java
│   │   │               └── controller/
│   │   │                   └── HelloController.java
│   │   └── resources/
│   │       └── application.properties
└── pom.xml

Application.java

这是Spring Boot应用的主入口类,用于启动应用。

示例代码:

package com.example.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

HelloController.java

这是应用的控制器类,用于提供HTTP接口。

示例代码:

package com.example.springcloud.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Cloud!";
    }
}

application.properties

这是应用的配置文件,用于配置Spring Boot的属性。

示例代码:

server.port=8080
spring.application.name=spring-cloud-example

pom.xml

这是项目的Maven配置文件,用于定义项目的依赖关系和配置信息。

示例代码:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

使用SpringInitializr创建项目

Spring Initializr是一个在线工具,可以帮助你快速创建Spring Boot项目。通过访问Spring Initializr官网,选择项目语言(Java)、Spring Boot版本、依赖等,可以自动生成一个完整的项目结构。

示例代码:

# 访问Spring Initializr官网
# 选择项目语言(Java)、Spring Boot版本、依赖等,自动生成项目结构

编写服务提供者与服务消费者代码

服务提供者

服务提供者是提供业务逻辑的服务。这里以一个简单的REST API为例。

示例代码:

package com.example.springcloud.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

@RestController
class ServiceProviderController {
    @GetMapping("/service")
    public String getServiceProvider() {
        return "Hello, I'm the Service Provider!";
    }
}

服务消费者

服务消费者是调用服务提供者API的服务。这里以一个简单的REST客户端为例。

示例代码:

package com.example.springcloud.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

@RestController
class ServiceConsumerController {
    private final RestTemplate restTemplate;

    public ServiceConsumerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/service")
    public String getServiceProvider() {
        return restTemplate.getForObject("http://SERVICE_PROVIDER/service", String.class);
    }
}
服务注册与发现

Eureka服务注册与发现的使用

Eureka是一个服务注册与发现组件,主要用在SOA架构里进行服务治理。Eureka有两个角色:Eureka Server(服务注册中心)和Eureka Client(服务提供者和服务消费者)。服务提供者和消费者向注册中心注册自己提供的服务和需要的服务,再由注册中心提供查询服务,各个服务之间通过服务名称来调用相关服务。

启动Eureka注册中心

示例代码:

package com.example.springcloud.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

配置Eureka注册中心

application.properties文件中配置注册中心的端口和通信地址。

示例代码:

spring.application.name=eureka-server
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

配置服务提供者

在服务提供者的application.properties文件中配置注册中心的地址。

示例代码:

spring.application.name=service-provider
server.port=8081
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

配置服务消费者

在服务消费者的application.properties文件中配置注册中心的地址。

示例代码:

spring.application.name=service-consumer
server.port=8082
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

使用SpringCloud配置Eureka

客户端配置

在服务提供者和服务消费者的application.properties文件中,需要配置Eureka注册中心的地址。

示例代码:

spring.application.name=service-provider
server.port=8081
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

服务注册

服务提供者和服务消费者向Eureka注册中心注册自己提供的服务和需要的服务。

示例代码(服务提供者):

package com.example.springcloud.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableEurekaClient
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

@RestController
class ServiceProviderController {
    @GetMapping("/service")
    public String getServiceProvider() {
        return "Hello, I'm the Service Provider!";
    }
}

示例代码(服务消费者):

package com.example.springcloud.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

@RestController
class ServiceConsumerController {
    private final RestTemplate restTemplate;

    public ServiceConsumerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/service")
    public String getServiceProvider() {
        return restTemplate.getForObject("http://SERVICE_PROVIDER/service", String.class);
    }
}
服务调用与负载均衡

使用Ribbon实现客户端负载均衡

Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它能在客户端实现软件负载均衡,使用Ribbon可以在客户端实现动态选择后端的服务。

配置Ribbon

在服务消费者的application.properties文件中,通过配置Ribbon来实现客户端的负载均衡。

示例代码:

spring.application.name=service-consumer
server.port=8082
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
ribbon.eureka.enabled=true
ribbon.eureka.serviceUrl.default=http://localhost:8761/eureka/

使用Ribbon进行服务调用

在服务消费者中,使用Ribbon进行服务调用,可以通过RestTemplate或者其他REST客户端来实现。

示例代码:

package com.example.springcloud.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@RibbonClient(name = "SERVICE_PROVIDER")
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

@RestController
class ServiceConsumerController {
    private final RestTemplate restTemplate;

    public ServiceConsumerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/service")
    public String getServiceProvider() {
        return restTemplate.getForObject("http://SERVICE_PROVIDER/service", String.class);
    }
}

服务调用与负载均衡实战

这里以一个简单的服务调用与负载均衡实战进行说明。

服务提供者

在服务提供者的application.properties文件中,配置Eureka注册中心的地址。

示例代码:

spring.application.name=service-provider
server.port=8081
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

服务消费者

在服务消费者的application.properties文件中,配置Eureka注册中心的地址,并启用Ribbon进行负载均衡。

示例代码:

spring.application.name=service-consumer
server.port=8082
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
ribbon.eureka.enabled=true
ribbon.eureka.serviceUrl.default=http://localhost:8761/eureka/
ribbon.listOfServers=http://localhost:8081,http://localhost:8082
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule
服务配置与共享

使用SpringCloudConfig进行集中式配置管理

Spring Cloud Config提供集中式的外部化配置服务,可以用于集中化管理所有应用的外部化配置,支持git等版本控制系统。这些配置可以再每个应用程序的环境(dev、test、prod等)中被不同的值所覆盖,非常方便地实现动态刷新配置而不需要重启应用。

配置Spring Cloud Config Server

首先创建一个Spring Cloud Config Server项目,在pom.xml中添加必要的依赖。

示例代码(pom.xml):

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
</dependencies>

在Spring Cloud Config Server的application.properties文件中配置git仓库地址。

示例代码:

spring.application.name=config-server
server.port=8888
spring.cloud.config.server.git.uri=https://github.com/your-repo
spring.cloud.config.server.git.username=your-name
spring.cloud.config.server.git.password=your-password

创建配置文件

在git仓库中创建配置文件,文件名格式可以为application-{profile}.ymlapplication-{profile}.properties

示例代码(application.yml):

spring:
  application:
   name: my-app
   profile: dev

配置Spring Cloud Config Client

在服务提供者和服务消费者的pom.xml文件中添加Spring Cloud Config Client依赖。

示例代码(pom.xml):

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
</dependencies>

在服务提供者和服务消费者的bootstrap.properties文件中配置Spring Cloud Config Client。

示例代码:

spring.application.name=my-app
spring.cloud.config.uri=http://localhost:8888
spring.profiles.active=dev

配置文件的版本控制与共享

在git仓库中维护配置文件的不同版本,可以通过Spring Cloud Config Server进行版本控制和共享。

示例代码(application.yml):

spring:
  application:
   name: my-app
   profile: dev
version: 1.0.0

动态刷新配置

Spring Cloud Config Server和Client都支持动态刷新配置,可以在不重启应用的情况下刷新配置。

示例代码(服务提供者):

package com.example.springcloud.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

@RefreshScope
@RestController
class ServiceProviderController {
    private final String version;

    public ServiceProviderController(@Value("${version}") String version) {
        this.version = version;
    }

    @GetMapping("/version")
    public String getVersion() {
        return version;
    }
}

示例代码(服务消费者):

package com.example.springcloud.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

@RestController
class ServiceConsumerController {
    private final RestTemplate restTemplate;

    public ServiceConsumerController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/version")
    public String getVersion() {
        return restTemplate.getForObject("http://SERVICE_PROVIDER/version", String.class);
    }
}

通过Spring Cloud Config Server和Client的配置,可以实现集中式的配置管理和动态刷新配置的功能。这对于大规模微服务架构来说是非常重要的特性。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消