1.在idea中构建聚合工程,父工程和子工程都是module,并在父工程的pom文件中,做如下的操作:
1.1pom文件中,配置统一的版本管理
org.springframework.boot spring-boot-dependencies2.3.2.RELEASE pom import org.springframework.cloud spring-cloud-dependenciesHoxton.SR9 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies2.2.6.RELEASE pom import
1.2pom文件中,添加所有子工程都需要的公共依赖,避免子工程中重复引入依赖,主要包括lombok和test依赖
org.projectlombok
lombok
provided
org.springframework.boot
spring-boot-starter-test
test
org.junit.jupiter
junit-jupiter-engine
1.3规范所有子工程的编译和运行版本
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
8
8
1.3.1为什么要配置jdk编译统一的版本
那为什么要配置统一的编译和运行版本呢,因为jdk版本是向下兼容的,我们使用高版本可以编译低版本的.java文件,但是如果在某个子工程中使用了高于编译版本的功能,就没法编译成.class文件,那就没法运行了
2.测试一下各个服务的请求是否正常
事先需要引入依赖
org.springframework.boot spring-boot-starter-web
然后写一个简单的controller测试一下web请求
@RestController
public class HelloController {
@GetMapping("/hello/{msg}")
public String sayHello(@PathVariable String msg) {
return "sayHello:" + msg;
}
}
成功了,那如何实现各个模块之间的通信呢?
2.1在调用方引入工具工程的依赖
com.jt sca-common1.0-SNAPSHOT
import common.MyUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello/{msg}")
public String sayHello(@PathVariable String msg) {
return MyUtils.sayHello(msg);
}
}
好了,调用成功了!但将来如果要实现这样恶的需求:有两个服务分别是订单服务和支付服务,订单在支付流程中需要调用支付服务的接口,而不是简单的调用方法,这就是我们接下来要实现子工程之间的服务调用了,这时我们就需要使用nacos了,我们先来看一下nacos的定义,看看他是用来干什么的
3.Nacos微服务配置中心
3.1先贴上一个noces版本的要求说明,因为nacos的版本要看springcloud的版本,其是相互对应的
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
3.2修改默认sql,在开头加上这段就可以了,之后在导入当前的sql数据库
DROP DATAbase IF EXISTS `nacos_config`; CREATE DATAbase `nacos_config` DEFAULT character set utf8mb4; SET names utf8mb4; SET FOREIGN_KEY_CHECKS = 0; USE `nacos_config`;
3.3启动nacos
引言:好了我们现在有了这几个子工程了,接下来我们需要有一个统一的配置管理中心去管理各个子工程(服务)之间的通信了
3.3.1我们需要在启动来中定义一个@Bean用来全局注册一个restTemplate,这个restTemplate可以用来访问别的服务的接口。同时,如果我们的被调用方有多个服务实例的话,可以在restTemplate上加上@Balanced注解,并使用以下方式实现负载均衡
@GetMapping("/consumer/doRestEcho3")
public String doRestEcho03(){
String url=String.format("http://%s/provider/echo/%s","sca-provider",appName);
//向服务提供方发起http请求,获取响应数据
return loadBalancedRestTemplate.getForObject(
url,//要请求的服务的地址
String.class);//String.class为请求服务的响应结果类型
}



