SpringCloud使用Ribbon组件完成跨服务通讯
Demo源码请从下面链接获取:
https://github.com/pengpengeveryday/SpringCloudDemo
创建cloud-base模块
从maven中新建一个工程,取名RibbonDemo。其中的module name写为cloud-base。(为什么用maven而不用spring intiate 向导?这样粒度更细,向导其实也是对等于maven的操作。试了后就能体会得到,不再缀叙)。按照如下操作来:
File->New->Project。弹出New Project对话框。在其中选中maven,直接点选Next。
在接下来的对话框中填写下面内容,然后下一步。
再接下来的对话框中填写如下内容,然后点击finish。
最后intelij上展示如下图所示,pom.xml什么都没有。
pom.xml of cloud-basecloud-base增加Spring cloud相关依赖项目,pom.xml内容如下。这样cloud-base就算是弄好了。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>peng.cloud</groupId>
<artifactId>cloud-base</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</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>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
新建cloud-eureka模块,作为服务注册中心
跟先前构建cloud-base模块类似,构建出cloud-eureka模块。构建好后,在pom.xml添加如下代码即引入了要用到的spring cloud的依赖。
<parent>
<groupId>peng.cloud</groupId>
<artifactId>cloud-base</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../cloud-base</relativePath>
</parent>
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>peng.cloud</groupId>
<artifactId>cloud-base</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../cloud-base</relativePath>
</parent>
<groupId>peng.cloud</groupId>
<artifactId>cloud-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
入口java文件内容如下截图所示
java application entry file在resource目录下的application.yml文件的内容如下:
application.yml到这一步,cloud-eureka就可以正常起来了。它用来完成服务的发现和关联相关事情。后面我们就能体会到它的用处。
构建cloud-shopping服务
这个服务是购物的服务,构建的步骤方式跟cloud-eureka类似。
java文件如下:
appapplication.yml文件如下:
application.yml可以看到,这个服务会挂到8802端口。
构建cloud-express服务
这个服务是快递服务。就是购物之后,会将物品快递出来。
方法和文件内容都差不多,都略过不截图了。
案例逻辑关系说明
这里有两个服务,cloud-shopping负责购物处理,cloud-express负责快递处理。就是购物完了之后,会将物品快递到客户家去。因此,
cloud-shopping
cloud-shopping模块,有一个controller来响应客户的服务请求,实现截图如下:
ShoppingController.java响应buy请求。
ShoppingService的实现截图如下:
ShoppingService.java@Service的注解意味着可以用系统AutoWired方式来自动创建出来,而不用new。 ShoppingService会调用cloud-service的服务来获取一个快递地址。(case不太合理,不过大家知道我的意思就行,就是了解服务之间的交互方法)
cloud-express
cloud-express也是有两个类。一个controller,一个service。因为都简单,直接上图,不再左说明。
ExpressController.java ExpressService.java所有的代码都介绍完毕了。下图是工程的模块摆放截图:
下面就启动下面图中的三个服务来看看效果吧。
三个module对应三个配置启动项目先启动EruekaApplication,再启动后面两个。
运行效果图如下:
浏览器访问截图用postman访问的结果展示
postman访问截图