使用Spring Cloud Alibaba创建微服务

使用Spring Cloud Alibaba创建微服务

1 Spring Cloud Alibaba对应的版本

版本选择很重要!!!

Spring Cloud生态组件版本
Spring CloudHoxton.SR3
Spring Boot2.2.5.RELEASE
Spring Cloud Openfeign2.2.2.RELEASE
Spring Cloud Gateway2.2.2.RELEASE
Spring Cloud Alibaba2.2.1.RELEASE
Nacos1.2.1
Dubbo2.7.6
Sentinel1.7.1
RocketMQ4.4.0
Seata1.2.0

2 Nacos

注意:安装nacos必须安装JDK1.8以上版本,单机模式不需要MySql,集群模式需要安装Mysql。

2.1 在Ubutu18.4中单机模式启动

# 下载Nacos,地址如下:
https://github.com/alibaba/nacos/releases/download/1.2.1/nacos-server-1.2.1.tar.gz
​
# (1) 解压nacos
tar -xzvf nacos-server-1.2.1.tar.gz
​
# (2) 进入nacos
cd nacos/bin/
​
# (3) 启动nacos
./startup.sh -m standalone;
​
# (4) 如果无法启动,查看一下是否是权限问题,如果不是权限问题,在命令前面添加“bash -f"
bash -f ./startup.sh -m standalone

2.2 使用nacos

输入以下地址:

http://localhost:8848/nacos/index.html

初始账号和秘密都是 nacos

3 创建服务提供者

创建工程名:provider

包名:com.mason.provider

如果在pom.xml中maven报错,为spring-boot-maven-plugin添加版本号,如下:

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.3.1.RELEASE</version>
    </plugin>
</plugins>

3.1 基本依赖

基础依赖的pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/>
    </parent>
    <groupId>com.mason</groupId>
    <artifactId>nacos-server-provider-test-8081</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>nacos-server-provider-test-8081</name>
    <description>Nacos server provider project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <dependencies>
        <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-discovery</artifactId>
        </dependency>
​
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
​
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
​
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
​
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.1.RELEASE</version>
            </plugin>
        </plugins>
    </build>
​
</project>

3.2 创建yml文件

删除resources目录下的application.property,添加application-provider8081.yml、application-provider8082.yml两个文件,如下:

application-provider8081.yml

server:
  port: 8081
​
spring:
  application:
    name: provider-01
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
​
management:
  endpoints:
    web:
      exposure:
        include: '*'

application-provider8082.yml

server:
  port: 8082
​
spring:
  application:
    name: provider-01
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
​
management:
  endpoints:
    web:
      exposure:
        include: '*'

3.3 创建controller

在com.mason.provider包下创建目录controller(与ProviderApplication.java同级目录),并创建ProviderController.java文件。如下:

package com.mason.provider.controller;
​
​
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
public class ProviderController {
​
    @Value("${server.port}")
    private String port;
​
    @GetMapping("/getData")
    public String getData(){
        return "Provider Hello World !  " + this.port;
    }
}

3.4 修改ProviderApplication

package com.mason.provider;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
​
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
​
}

3.5 测试

在idea同时启动两个微服务(参考另一篇博客“微服务集群简单搭建(Eureka)“配置),

启动的参数分别为(对应yml文件中application后的名称):--spring.profiles.active=provider8081,--spring.profiles.active=provider8082

在浏览器中输入地址如下:

http://localhost:8081/getData返回值是"Provider Hello World ! 8081",

http://localhost:8082/getData返回值是 "Provider Hello World ! 8082“

在nacos中可以看到,如下:

4 创建服务消费者

创建工程名:consumer

包名:com.mason.consumer

4.1 基本依赖

基础依赖的pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mason</groupId>
    <artifactId>consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumer</name>
    <description>Nacos server consumer project for Spring Boot</description>
    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
​
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
​
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
​
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
​
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
​
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
​
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.1.RELEASE</version>
            </plugin>
        </plugins>
    </build>
​
</project>

4.2 创建yml文件

将resources目录下的application.property,修改为application.yml文件,如下:

server:
  port: 8080
​
spring:
  application:
    name: consumer-01
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
​
management:
  endpoints:
    web:
      exposure:
        include: '*'

4.3 配置RestTemplate+Ribbon

com.mason.consumer包下创建目录util(与ConsumerApplication.java同级目录),并创建RestTemplateConfiguration.java文件,如下:

package com.mason.consumer.util;
​
​
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
​
@Configuration
public class RestTemplateConfiguration {
    // 使客户端负责均衡
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
​

4.4 创建controller

在com.mason.consumer包下创建目录controller(与ConsumerApplication.java同级目录),并创建ConsumerController.java文件,如下:

package com.mason.consumer.controller;
​
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
​
@RestController
public class ConsumerController {
    
    // 设置服务提供着的名称
    private final String PROVIDER_URL = "http://provider-01";
​
    @Autowired
    private RestTemplate restTemplate;
​
    @GetMapping("/getData")
    public String getData(){
        return this.restTemplate.getForObject(PROVIDER_URL+"/getData", String.class);
    }
}

4.5 修改ConsumerApplication

package com.mason.consumer;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
​
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
​
}

4.6 测试

在浏览器中输入:http://localhost:8080/getData,可能看到返回值是"Consumer Hello World ! 8081",也可能是"Consumer Hello World ! 8082"。

在nacos中可以看到,如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值