0.版本
JDK:1.8
Spring Boot:2.6.13
spring-cloud-dependencies:2021.0.5
spring-cloud-alibaba-dependencies:2021.0.5.0
1.父工程搭建
我们创建一个spring boot项目作为父工程(也可以单独创建一个module,再引入spring boot依赖)
参考下面内容,填写必要信息,然后点击下一步。
然后来到下一步,这个地方我们选择的spring boot 版本是2.7.16,你可以根据自己的需要选择版本,版本对应关系参考文章参考下面这篇文章:https://www.longkui.site/program/java/spring-cloud-alibaba/6051/
注意,此处可以先随便选个版本,后面在pom文件中修改。本文后面选用spring boot的版本已经换成2.6.13
然后一直点击下一步直到创建完毕。
如果出现下面这种情况,Project ‘org.springframework.boot.spring-boot-starter-parent:2.7.16-SNAPSHOT’not found,点击上面的链接解决。
然后开始添加必要的依赖,我们打开父工程的pom文件,删除一些暂时用不到的依赖,然后引入必要依赖。
在前面搭建spring cloud netflix过程中,我们每个module都引入了自己的依赖,这篇文章我们使用dependencyManagement来管理依赖。
参考如下:
<?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> <packaging>pom</packaging> <modules> <module>producer-1</module> </modules> <!--父工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.13</version> <relativePath/> </parent> <groupId>site.longkui</groupId> <artifactId>s-cloud-alibaba</artifactId> <version>0.0.1-SNAPSHOT</version> <name>s-cloud-alibaba</name> <description>spring cloud alibaba demo</description> <!--依赖版本 --> <properties> <java.version>1.8</java.version> </properties> <dependencyManagement> <dependencies> <!--spring cloud 依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.5</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud alibaba依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.5.0</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>
2.创建生产者
我们首先创建第一个微服务模块,生产者。端口为:8010
右击父模块,新建—>新模块
我们定义生产者的名称,假设是producer-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"> <parent> <artifactId>s-cloud-alibaba</artifactId> <groupId>site.longkui</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>producer-1</artifactId> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
我们在resources中创建配置文件application.yml,初始内容如下:
server: port: 8010 #服务的端口 #spring相关配置 spring: application: name: service-producer #服务的名称
然后我们创建启动类
package site.longkui; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class producerApplication { public static void main(String[] args) { SpringApplication.run(producerApplication.class, args); } }
创建controller层,并编写一个默认接口
package site.longkui.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/user") public class userController { @GetMapping("/getUser") public String getUser() { return "I`m producer 1 ,return user"; } }
我们启动生产者,测试一下接口:
http://localhost:8010/user/getUser
3.创建消费者
创建完了生产者的微服务,我们再来创建一个消费者的微服务。创建消费者的过程和生产者类似,我们假设端口是9010,命名为consumer-1。
我们在resources创建application.yml
server: port: 9010 #服务的端口 #spring相关配置 spring: application: name: service-consumer #服务的名称
然后创建启动类:
package site.longkui; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class consumerApplication { public static void main(String[] args) { SpringApplication.run(consumerApplication.class, args); } }
然后我们创建RestTemplate:
package site.longkui.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class applicationRestTemplate { /** * 注册RestTemplate对象到Spring容器 */ @Bean public RestTemplate getRestTemplate() { return new RestTemplate(); } }
然后我们创建controller,并设置访问生产者的地址
package site.longkui.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/consumer") public class consumerController { @Autowired private RestTemplate restTemplate; @GetMapping("/getUser") public String getUser(){ //指出服务地址 String url="http://localhost:8010/user/getUser"; //返回值类型和我们的业务返回值一致 return restTemplate.getForObject(url, String.class); } }
然后测试消费者访问生产者:
http://localhost:9010/consumer/getUser
可以看到,消费者调用生产者成功,返回生产者的数据。