聚合工程服务创建以及调用
一、Maven聚合工程创建以及准备工作
1、pom依赖
<?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>com.yuange</groupId>
<artifactId>new-spring-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 一般来说父级项目的packaging都为pom,packaging默认类型jar类型-->
<packaging>pom</packaging>
<!-- 版本说明-->
<properties>
<!-- jdk版本-->
<java.version>1.8</java.version>
<!-- Maven编译的版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<!-- 设置springCloud和alibabaCloud的版本-->
<dependencyManagement>
<dependencies>
<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/2.3.3.RELEASE-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies/Hoxton.SR8-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies/2.2.1.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!--项目打包的名称-->
<!--<finalName>my-demo1</finalName>-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
<!-- 阿里云镜像依赖仓库(下载依赖更快) -->
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<layout>default</layout>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</project>
2、添加子项目以及依赖
给other1和other2加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--父-->
<dependency>
<groupId>com.yuange</groupId>
<artifactId>spring-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
3、添加配置application.yml
spring-other1的配置,spring-oher2的同理端口与服务名称不能相同
server:
port: 8000
spring:
application:
name: spring-other1 #服务的名称
4、启动类
@SpringBootApplication
public class SpringOther1Application {
public static void main(String[] args) {
SpringApplication.run(SpringOther1Application.class,args);
}
}
5、Controller类
@RestController
@RequestMapping("other1")
public class OtherController1 {
@RequestMapping("username")
String getUserName(@RequestParam("name") String userName) {
return userName+"-该字段为other1的getUserName反回的数据";
}
}
二、服务调用
1、RPC介绍
RPC:
远程过程调用,像调用本地服务(方法)一样调用服务器的服务
支持同步、异步调用
客户端和服务器之间建立TCP连接,可以一次建立一个,也可以多个调用复用一次链接
RPC数据包小
protobuf
thrift
rpc:编解码,序列化,链接,丢包,协议
Rest(Http):
http请求,支持多种协议和功能
开发方便成本低
http数据包大
java开发:resttemplate或者httpclient
2、使用springboot自带的方法restTemplate远程调用及结果
在启动类下加
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
spring-other2的controller方法
@RestController
@RequestMapping("other2")
public class OtherController2 {
//通过restTemplate远程调用
@Autowired
private RestTemplate restTemplate;
/**
* 中转站的作用通过获取userName参数,调用other1的getusername方法获取结果返回页面
* @param userName
* @return
*/
@RequestMapping("getusername")
String getUserName(@RequestParam("name") String userName) {
//第一个参数是发送url以及拼接数据,第二个参数是返回类型
String userName2 = restTemplate.getForObject("http://localhost:8000/other1/getusername?name="+userName,String.class);
return userName2+"-该字段为other2的getUserName反回的数据";
}
}
测试结果