Spring Cloud Alibaba 环境搭建

可以手动从一个 Maven 项目进行搭建,后期也可以利用 Idea 工具直接从阿里云官网进行快捷搭建,网址为Aliyun Java Initializr,类似于 SpringBoot 的初始化向导 Spring Initializr。我们逐层进行演示

一、分布式环境搭建

1. 创建父级 Spring Boot 项目

pom.xml


    4.0.0

    com.pushihao
    test
    0.0.1-SNAPSHOT
    test
    test

        11
        2.6.7

                org.springframework.boot
                spring-boot-starter-parent
                ${spring.boot.version}
                pom
                import

            org.springframework.boot
            spring-boot-starter

            org.springframework.boot
            spring-boot-starter-test
            test

                org.springframework.boot
                spring-boot-maven-plugin

2. 新建两个模块

新建子模块时最好新建 Maven 项目,因为可以设置父项目。如果新建 Spring Boot Initializr 则默认父项目是 spring-boot-starter-parent

这里以订单模块(order)和仓库模块(stock)为例

假设仓库模块为生产者,订单模块为调用者。当调用订单模块时,订单模块调用仓库模块,使库存减一

项目结构如下:

Spring Cloud Alibaba 环境搭建

具体文件:

pom.xml (两个模块的 pom.xml 几乎相同)


        SpringCloud
        com.pushihao
        0.0.1-SNAPSHOT

    4.0.0

    stock

            org.springframework.boot
            spring-boot-starter-web

StockApplication.java

package com.pushihao;

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

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

StockController.java

package com.pushihao.controller;

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

@RestController
@RequestMapping("/stock")
public class StockController {

    @GetMapping("reduct")
    public String reduct() {
        System.out.println("库存减一");
        return "success!";
    }
}

OrderApplication.java

package com.pushihao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

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

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

OrderController.java

package com.pushihao.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("add")
    public String add() {
        System.out.println("订单加一");
        //result为返回结果
        String result = restTemplate.getForObject("http://localhost:9001/stock/reduct", String.class);
        return "success!";
    }
}

至此,一个简单的分布式环境就搭建好了,使用浏览器调用 http://localhost:9002/order/add 就可以看到结果

Spring Cloud Alibaba 环境搭建

Spring Cloud Alibaba 环境搭建

Spring Cloud Alibaba 环境搭建

二、Spring Cloud Alibaba 环境搭建

可以直接在原有的分布式环境上直接引用 Spring Cloud Alibaba 即可

项目结构如下:

Spring Cloud Alibaba 环境搭建

1. 导入 Spring Cloud Alibaba 和 Spring Cloud 的坐标

注意:版本号一定要选对(按照要求)参考 版本说明

稳定版本依赖关系

Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version 2021.0.1.0 Spring Cloud 2021.0.1 2.6.3 2.2.7.RELEASE Spring Cloud Hoxton.SR12 2.3.12.RELEASE 2021.1 Spring Cloud 2020.0.1 2.4.2 2.2.6.RELEASE Spring Cloud Hoxton.SR9 2.3.2.RELEASE 2.1.4.RELEASE Spring Cloud Greenwich.SR6 2.1.13.RELEASE 2.2.1.RELEASE Spring Cloud Hoxton.SR3 2.2.5.RELEASE 2.2.0.RELEASE Spring Cloud Hoxton.RELEASE 2.2.X.RELEASE 2.1.2.RELEASE Spring Cloud Greenwich 2.1.X.RELEASE 2.0.4.RELEASE(停止维护,建议升级) Spring Cloud Finchley 2.0.X.RELEASE 1.5.1.RELEASE(停止维护,建议升级) Spring Cloud Edgware 1.5.X.RELEASE

组件版本关系(一般由Spring Cloud Alibaba 版本管理器直接控制,我们不用关心)

Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version 2021.0.1.0* 1.8.3 1.4.2 4.9.2 2.7.15 1.4.2 2.2.7.RELEASE 1.8.1 2.0.3 4.6.1 2.7.13 1.3.0 2.2.6.RELEASE 1.8.1 1.4.2 4.4.0 2.7.8 1.3.0 2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE 1.8.0 1.4.1 4.4.0 2.7.8 1.3.0 2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE 1.8.0 1.3.3 4.4.0 2.7.8 1.3.0 2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE 1.7.1 1.2.1 4.4.0 2.7.6 1.2.0 2.2.0.RELEASE 1.7.1 1.1.4 4.4.0 2.7.4.1 1.0.0 2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE 1.7.0 1.1.4 4.4.0 2.7.3 0.9.0 2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE 1.6.3 1.1.1 4.4.0 2.7.3 0.7.1

这里使用最新稳定版即可


    4.0.0

    com.pushihao
    test
    pom
    0.0.1-SNAPSHOT

        order
        stock
        order-nacos
        stock-nacos

    test
    test

        11
        2.3.12.RELEASE
        Hoxton.SR12
        2.2.7.RELEASE

                org.springframework.boot
                spring-boot-starter-parent
                ${spring.boot.version}
                pom
                import

                org.springframework.cloud
                spring-cloud-dependencies
                ${spring.cloud.version}
                pom
                import

                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring.cloud.alibaba.version}
                pom
                import

            org.springframework.boot
            spring-boot-starter

            org.springframework.boot
            spring-boot-starter-test
            test

                org.springframework.boot
                spring-boot-maven-plugin

2.1 新建 stock-nacos 模块

pom.xml


        SpringCloud
        com.pushihao
        0.0.1-SNAPSHOT

    4.0.0
    stock-nacos

            org.springframework.boot
            spring-boot-starter-web

            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery

                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1

                    11
                    11

application.yml

server:
  port: 9001
spring:
  application:
    name: stock-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        cluster-name: public

StockNacosApplication.java

package com.pushihao;

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

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

StockController.java

package com.pushihao.controller;

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

@RestController
@RequestMapping("/stock")
public class StockController {

    @GetMapping("reduct")
    public String reduct() {
        System.out.println("库存减一");
        return "success!";
    }
}

2.2 新建 order-nacos 模块

pom.xml


        test
        com.pushihao
        0.0.1-SNAPSHOT

    4.0.0

    order-nacos

            org.springframework.boot
            spring-boot-starter-web

            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery

                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1

                    11
                    11

application.yml

server:
  port: 9001
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        username: nacos
        password: nacos
        namespace: public
        # ephemeral: false  #是否是临时实例 默认是true(临时实例)  永久实例:哪怕宕机了也不会删除实例

OrderNacosApplication.java

package com.pushihao;

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

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

    //加上@LoadBalanced就配上了默认的负载均衡器Ribbon
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
        return restTemplateBuilder.build();
    }
}

OrderController.java

package com.pushihao.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("add")
    public String add() {
        System.out.println("下单成功");

        //这里就可以把IP地址替换成对应的服务名,调用时就会启用默认的负载均衡机制
        String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);

        return "success!";
    }
}

至此 Spring Cloud Alibaba 环境就搭建完毕了

依次启动 nacos 服务器、stock-nacos、order-nacos

浏览器输入 http://localhost:8848/nacos 在服务管理一栏即可查看注册的微服务

Spring Cloud Alibaba 环境搭建

浏览器输入 http://localhost:9001/order/add 即可查看运行结果

Spring Cloud Alibaba 环境搭建

Spring Cloud Alibaba 环境搭建

Spring Cloud Alibaba 环境搭建

成功!

三、使用 Aliyun Java Initializr 快速构建

可以直接在网页上 Aliyun Java Initializr 进行配置,然后下载初始代码并导入编辑器工具中

不过更多情况下,都是使用 Idea 工具进行快速构建,如下:

Spring Cloud Alibaba 环境搭建

以上!

Original: https://www.cnblogs.com/psh1024/p/16273303.html
Author: IT-Small-White
Title: Spring Cloud Alibaba 环境搭建

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/569301/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【spring源码学习】spring事务中的嵌套事务中的保存点相关知识

    JDBC事务保存点(setSavepoint, releaseSavepoint )实例 以下是使用事务教程中描述的 setSavepoint和回滚的代码示例。 此示例代码是基于前…

    Java 2023年5月29日
    068
  • 【Spring源码分析】Bean加载流程概览(转)

    转载自:https://www.cnblogs.com/xrq730/p/6285358.html 代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入【Spring源码分析】这个板…

    Java 2023年5月29日
    083
  • Spring实例化bean之后的处理, 关于BeanPostProcessor接口的使用

    业务需求:缓存页面,展示需要缓存的所有对象,每类对象在字典表中有编码对应,点击某个对象可以缓存某类对象,每类对象都有自己的缓存runner(弱弱的说一句,本人看到这里的第一反应就是…

    Java 2023年6月8日
    071
  • java基础–高内聚与低耦合

    模块 模块是从逻辑上将系统分为更细微的部分,将复杂的问题拆成多个简单的问题,逐个解决耦合主要描述模块之间的关系、内聚主要描述的是模块的内部。模块的粒度可大可小,可以是函数、类、功能…

    Java 2023年6月8日
    0109
  • Docker有什么好处?

    镜像管理 镜像是Docker管理最基础的部分,同时也是Docker最大的亮点。镜像管理涉及到镜像的制作、更新、存储、分发、权限等多个方面。 镜像制作方面,应该坚持三个原则,第一是坚…

    Java 2023年6月9日
    082
  • 面试题:sleep() 和 wait()的区别?

    1.相同点: 一旦执行方法,都可以使得当前的线程进入阻塞状态。 2.不同点: 1)两个方法声明的位置不同:Thread类中声明sleep() , Object类中声明wait()2…

    Java 2023年6月14日
    072
  • Java多线程(二)

    多线程出现了安全问题。 问题的原因: 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。例如:买票问…

    Java 2023年6月9日
    078
  • 老生常谈系列之Aop–CGLIB动态代理的底层实现原理

    老生常谈系列之Aop–CGLIB动态代理的底层实现原理 前言 上一篇老生常谈系列之Aop–JDK动态代理的底层实现原理简单讲解了JDK动态代理的实现,动态代…

    Java 2023年6月8日
    0117
  • Java基础–int与Integer区别

    看过java相关入门开发的书籍的应该都知道,这个标题其实涉及到两个问题: 1. java基本数据类型和引用类型 2. 自动拆箱和自动装箱 下面就这两个问题进行一下总结复习。 一、j…

    Java 2023年6月5日
    058
  • WORD模板使用

    Date: 2012-12-03 13:05:55 中国标准时间 Author: csophys Org version 7.8.11 with Emacs version 24V…

    Java 2023年6月7日
    0112
  • 戏说领域驱动设计(廿三)——工厂

    在讲解实体的章节中我们曾经介绍说过如何有效的创建实体,主要包括两种方式:工厂和构造函数。本章我们工厂进行一下详解,这种东西能有效的简化实体使用的难度,毕竟你无法通过Spring这种…

    Java 2023年6月7日
    087
  • 关键字,接口,代码块,枚举

    今日内容 1 关键字 2 代码块 3 接口 4 枚举 1 Java中的关键字 static关键字 : 静态的意思 , 可以修饰变量 , 也可以修饰方法 , 被static修饰的成员…

    Java 2023年6月13日
    077
  • Spring 源码(2)Spring IOC 容器 前戏准备工作

    Spring 最重要的方法refresh方法 根据上一篇文章 https://www.cnblogs.com/redwinter/p/16141285.html Spring Be…

    Java 2023年6月14日
    080
  • Linux常用命令整理:文件目录管理

    据说,你要对Linux文件做的事情,98%都记录在这篇文章里了。 1.ls命令 最常见的命令,相信刚进入linux命令行界面的时候,都要用这个命令看看当前目录下都有哪些文件吧。 名…

    Java 2023年6月5日
    090
  • JAVA 创建也项目平级文件

    undefined String url = System.getProperty("user.dir") +"/logs/test.txt&quot…

    Java 2023年5月29日
    0100
  • Spring Batch 批处理框架

    《Spring Batch 批处理框架》基本信息作者: 刘相出版社:电子工业出版社ISBN:9787121252419上架时间:2015-1-24出版日期:2015 年2月开本:1…

    Java 2023年5月30日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球