介绍

SpringCloudAlibaba 体验-微服务开发入门教学

通过该教程,你将会:

  • 使用 spring cloud alibaba 搭建一个最小化的微服务集群。
  • 并完成客户端和服务端之间的调用示例。
    案例学习时间预计15分钟左右。

沙盒中代码编译报错,测试代码为本地调试,需要注意端口号等配置问题

准备工作

本节,你将通过 git 命令下载程序代码,并启动 Nacos 服务端

获取客户端程序代码

请使用下面的命令获取客户端程序代码

cloudshell-git-open "https://start.aliyun.com/type=maven-project&language=java&architecture=none&bootVersion=2.3.4.RELEASE&baseDir=client&groupId=com.example&artifactId=client&name=client&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.client&packaging=jar&javaVersion=1.8&dependencies=sca-nacos-discovery,web,cloud-feign&demos=nacosdiscoveryconsumer/client.git" /home/shell/client

获取服务端程序工程

请使用下面的命令获取服务端程序代码

cloudshell-git-open "https://start.aliyun.com/type=maven-project&language=java&architecture=none&bootVersion=2.3.4.RELEASE&baseDir=server&groupId=com.example&artifactId=server&name=server&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.server&packaging=jar&javaVersion=1.8&dependencies=sca-nacos-discovery,web&demos=nacosdiscoveryprovider/server.git" /home/shell/server

启动 Nacos 服务端

通过如下命令启动服务端

sh ~/prepare.sh

完成以上操作后,你将会获得链各个工程的代码,如下:

ls -l /home/shell/
drwxr-xr-x 5 shell shell 4096 Dec 15 14:26 client
drwxr-xr-x 5 shell shell 4096 Dec 15 14:26 server

通过如下命令观察nacos启动日志:

cat /home/shell/nacos/logs/start.out

待出现如下输出时,代表启动完成(如果未完成启动,可以重复执行上一条命令):

INFO Tomcat started on port(s): 65000 (http) with context path '/nacos'
……
INFO Nacos started successfully in stand alone mode. use embedded storage

修改配置

本节,你讲修改代码的一些基本配置,让程序可以运行。
请认真按照本节的引导操作。在完成修改后,一定要记得保存哦。

修改服务端配置

  • 打开 服务端的 application.properties 文件
  • 修改 Web 访问端口

将 server.port 的值改为 60000
出于安全性和其他平台限制的考虑,目前外部只能使用6[0-5]000六个端口。

  • 修改注册中心地址

将注册中心改为刚才启动的 Nacos 服务端的地址

spring.cloud.nacos.discovery.server-addr=127.0.0.1:65000

修改客户端配置

打开 客户端的 application.properties 文件

  • 修改 Web 访问端口

将 server.port 的值改为 61000
要避免和服务端发生端口冲突,而60000已经被分配给了服务端,这里就用61000。

  • 修改注册中心地址

将注册中心改为刚才启动的 Nacos 服务端的地址

spring.cloud.nacos.discovery.server-addr=127.0.0.1:65000
  • 修改OpenFeign方式调用的服务名称

打开文件 EchoService
将其中的 nacos-discovery-provider-sample 替换为 server

  • 修改RestTemplate方式调用的服务名称

打开文件 RestTemplateController
将其中的 nacos-discovery-provider-sample 替换为 server

对EchoService 和 RestTemplateController 修改,会在下一节做详细说明

功能&代码说明

本节主要是对内容的说明和介绍,没有对项目的操作内容;

服务端

在本案例中,服务端只提供一个服务,即: EchoServiceController
该服务只有一个方法,接收字符串型的消息,并返回 "[ECHO] : " + message 内容。这里的逻辑实现,并不具有太多的业务意义,只是对服务端逻辑执行的演示。

可以看到, 在 EchoServiceController 上增加了 @RestController 注解。熟悉 spring 的同学应该知道,这代表了被标注类是一个 Rest 风格的 http 接口。
在 echo 方法上,由于标注了 @GetMapping("/echo/{message}") 注解,所以可以通过 http://ip:port/echo/{message} 来直接访问。
其中的 {message} 可以被替换为你需要的任何消息。
后面章节会对具体的访问做演示。

客户端

客户端程序自身并没有业务逻辑的实现,而是通过调用服务端的业务服务来实现业务,所以在本案例中需要重点关注如何使用客户端调用服务端。

在本案例中,客户端通过 nacos 的注册中心功能实现对服务端的发现。所以你会发现在客户端里并没有配置任何 服务端的地址 信息。
参考:客户端的 application.properties

本案例中的客户端通过两种方式调用服务端,所谓的”两种方式“具体来说是两种消费客户端的编程模型:

使用 OpenFeign 方式

参考:OpenFeignController,EchoService

  • OpenFeignController 作为web调用的入口,用于接收前端的调用请求,并向内调用业务与服务实现功能。

  • EchoService 是应用中对服务端所提供服务的引用接口。
    在这个接口上,标注了 @FeignClient 注解,以表示这个接口的服务是哪个服务端提供的。
    @FeignClient 注解的值代表了服务端应用的 服务端应用名,以便于在多个不同的服务提供者之间确定具体的服务。

使用 RestTemplate方式

参考:RestTemplateController
RestTemplate 是 spring 对所有 restful 服务调用的封装。
在 RestTemplateController 中,通过 restTemplate.getForObject 来调用服务端的 EchoServiceController.echo 方法。
通过前文的操作,将 getForObject 的第一个参数改为 "http://server/echo/" + message。这看起来像是一个标准的url地址,但是其中的server并不是域名,而是服务提供者的应用名。

前文说到,客户端并不关注服务端的地址,但是需要关注服务端应用名,这两个概念是有区别的:

  • 服务端应用名:是一个逻辑概念,代表可以被独立部署的一套应用程序;
  • 服务端的地址:是物理概念,是实际部署以后具体的物理地址,例如IP;

每个服务端应用名可以部署多份实例,每个实例都有自己的服务端的地址。

编译打包

本节,你需要使用 maven 的命令将程序代码编译打包为可执行的 jar 包

编译服务端程序

  • 进入服务端目录
cd /home/shell/server
  • 执行编译命令
mvn clean package -Dmaven.test.skip

tips: 第一次编译,因为本地 maven 仓库缺少相关的类库,编译可能会花 1-2 分钟的时间

编译客户端程序

  • 进入服务端目录
cd /home/shell/client
  • 执行编译命令
mvn clean package -Dmaven.test.skip

tips: 如果修改代码以后,需要重新执行编译命令

运行程序

本节,你将使用 java 命令来运行上一步打包完成的 jar 文件

启动服务端

1、开启新 console 窗口:
2、在新窗口中执行命令

java -jar /home/shell/server/target/server-0.0.1-SNAPSHOT.jar

启动客户端

1、开启新 console 窗口:
2、在新窗口中执行命令

java -jar /home/shell/client/target/client-0.0.1-SNAPSHOT.jar

访问应用程序

本节,你将通过浏览器访问在上一节运行起来的服务端程序和客户端程序

直接访问服务端程序

由于服务端使用http协议提供服务,所以可以直接使用浏览器访问,我们先来验证服务端的功能。
通过链接 访问地址 http://{ip}:60000/echo/theonefx
看到下面的内容代表服务端可以正常工作

hello Nacos Discovery theonefx

访问客户端程序

由于客户端提供2种调用方式,这里也分别请求者两个入口,参照访问服务端的方式,选择 61000 端口访问客户端。

  • Openfeign
    使用链接访问地址 http://{ip}:62000/echo-feign/{message} 其中 {message} 可以替换为你需要的信息,你可以看到下面的效果:
http://127.0.0.1:62000/echo-feign/feignclient

hello Nacos Discovery feignclient

  • RestTemplate
    使用链接访问地址 http://{ip}:62000/echo-rest/{message} 其中 {message} 可以替换为你需要的信息,你可以看到下面的效果:
http://127.0.0.1:62000/echo-rest/restclient

hello Nacos Discovery restclient

posted on 2021-02-06 16:32  学业未成  阅读(100)  评论(0编辑  收藏  举报