Spring Cloud / Alibaba 微服务架构实战 | 网盘下载

1,669 阅读3分钟

Download: Spring Cloud / Alibaba 微服务架构实战 | 网盘下载

Spring Cloud / Alibaba 微服务架构实战 - 微服务架构

软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点 Spring Cloud / Alibaba 微服务架构实战

链接: https://pan.baidu.com/s/1Qq3FAqzkmakso2E7KuxvVg 提取码: kczq
作者-\/ 307570512

微服务优点 每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。 微服务能使用不同的语言开发。 微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, bamboo 。 一个团队的新成员能够更快投入生产。 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。 微服务允许你利用融合最新技术。 微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。 微服务能够即时被要求扩展。 微服务能部署中低端配置的服务器上。 易于和第三方集成。 每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库。

微服务架构的缺点 微服务架构可能带来过多的操作。 需要DevOps技巧 (en.wikipedia.org/wiki/DevOps). 可能双倍的努力。 分布式系统可能复杂难以管理。 因为分布部署跟踪问题难。 当服务数量增加,管理复杂性增加。

Spring Cloud / Alibaba 微服务架构实战 - 微服务架构设计原则

AKF拆分原则 前后端分离 无状态服务 Restful通信风格

Spring Cloud / Alibaba 微服务架构实战 - Nacos服务注册与配置中心

Nacos用来做服务注册中心以及配置中心,相当于Spring Cloud的Eureka(已停止维护)或者Zookeeper(没有控制台,不方便查阅注册服务)抑或Consul(某种原因,不建议使用)服务注册中心,以及Spring Cloud Confi或携程开源的Apollo配置中心二者的结合版。

  1. 创建一个maven父工程,引入spring-cloud以及spring-cloud-alibaba版本依赖
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>
         <!-- nacos注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
       <!-- nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <!-- 依赖版本号管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.62</version>
            </dependency>
            <dependency>
	            <groupId>com.alibaba.cloud</groupId>
	            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
	            <version>2.1.0.RELEASE</version>
	            <type>pom</type>
	            <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

  1. 创建modules子工程
@SpringBootApplication
public class NacosApplication {

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

}

Spring Cloud / Alibaba 微服务架构实战 - 微服务通信

maven地址:

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>

<!--eureka-->
  <dependency>
   	 <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>

一般注册中心都自带

<!--nacos-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {

	public static void main(String[] args) {
		SpringApplication.run(OrderApplication.class, args);
	}
    /**
     * 向Spring容器中定义RestTemplate对象
     * @return
     */
	@Bean
    @LoadBalanced  #此注解一定要有,要不然找不到服务
    public RestTemplate restTemplate(){
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate;
    }
}

服务调用

public Item queryItemById(Long id) {
      	//该方法走注册中心调用
      	//去注册中心根据app-item查找服务,这种方式必须先开启负载均衡@LoadBalanced
        String itemUrl = "http://app-item/item/{id}";
        Item result = restTemplate.getForObject(itemUrl, Item.class, id);
        System.out.println("订单系统调用商品服务,result:" + result);
        return result;
    }

OpenFeign

package com.hao.springcloud.cloudconsumerorder8002.service;
#注意这个目录地址,就是上边EnableFeignClients指定的目录

import com.hao.cloudapicommons.bean.Payment;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@Service
@FeignClient("cloud-payment-service")//被调用的服务名
public interface PaymentService {

	//接口必须和被调用的接口地址、参数、返回类型都保持一致
    @GetMapping("/getPayMent/{id}")
    public Payment getPayMent(@PathVariable("id") long id);
}