前言:
Spring Cloud系列教程的所有博客均在下方的目录链接中,方便大家查找和阅读。建议按照顺序学习,对于项目搭建有疑问的可以着重看目录里的第二篇博客。
Spring cloud学习专栏目录
一、服务提供者与服务消费者
既然是微服务架构也就必然存在服务间的相互通信,所以我们要明确两个概念也就是服务提供者与服务消费者。
服务提供者:服务的被调用方,供其他服务调用(也就是为其他服务提供服务)
服务消费者:服务的调用方,需要调用其他服务来完成请求。
如下图所示可以看出,人发起购买车票的请求,车票微服务接收请求并处理请求(如判断余票是否充足),同时车票微服务也要向用户微服务发送请求,获取用户相关信息(如用户填写的身份信息是否正确)。
所以对于人和车票微服务来说,人是服务消费者,车票微服务是服务提供者;对于车票微服务和用户微服务来说,车票微服务是服务消费者,用户微服务是服务提供者。
二、搭建Maven聚合工程——创建父工程
2.1 创建Maven Project
———————————————————————————————————
选择创建一个简单的项目点击下一步
输入必要内容点击finish就可以了
注:Group ID:定义该项目属于哪个组,前面为公司域名倒写(域名.公司名.项目名),此处我没有公司名。
Artifact ID:定义了这个模块在项目中的唯一标识,或者说是功能。例如此处我们在搭建聚合工程时,一般命名为 mircroservice、mircroservice-parent、mircroservice-root表示它是顶部的聚合工程而不是子模块。
2.2 在pom.xml中添加依赖
对比你自己的pom文件,加上没有的就好,下面的图有说明
这里的话父工程起到了对于整个项目依赖的一个管理,所以我们后面再创建的用户微服务和车票微服务,就不需要编辑他们的pom文件了。
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
</parent>
<groupId>com.springcloud</groupId>
<artifactId>microservice-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencies>
<!-- web支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- springboot插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
三、编写服务提供者——用户微服务
3.1 创建用户微服务子工程
右键刚创建好的工程–>new–>project
———————————————————————————————————
选择Maven Module,注意不是Maven Project,点击next
———————————————————————————————————
就创建好了
3.2 代码编写
3.2.1新创建一个包,编写启动类UserServiceApplication
一般来说我们约定,一个服务的启动类的命名为 xxxApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
3.2.2新创建一个包,编写一个简单的用户实体类User*
public class User {
private Long id;
private String name;
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
3.2.3新创建一个包,编写用户信息查询的service
@Service
public class UserService {
//创建一个map模拟数据库存放用户信息
private static Map<Long, User> userMap = new HashMap<Long, User>();
static {
//添加数据
userMap.put(1l, new User(1l,"张三"));
userMap.put(2l, new User(2l,"李四"));
}
/*
* 根据传入的number返回用户信息
*/
public User queryUserInfo(Long id) {
return userMap.get(id);
}
}
3.2.4新创建一个包,编写用户的Controller
@RestController
public class UserController {
//注入service
@Autowired UserService userService;
/*
* 用户信息查询的接口
*/
@GetMapping(value = "/getUserInfo/{id}")
public User queryUserInfo(@PathVariable("id") Long id) {
return userService.queryUserInfo(id);
}
}
3.2.5在resources下创建application.properties配置文件,进行端口和编码配置
端口号配置为8081
3.3启动服务,进行测试
找到UserServiceApplication右键–>Run As–>Spring Boot App
注:如果没有这个选项,在eclipse中下载STS插件就好了
打开浏览器访问地址:http://localhost:8081/getUserInfo/1,可以看到成功查询出了id为1的用户信息。那么这个微服务就写好了。
四、编写服务消费者——车票微服务
4.1 创建车票微服务子工程
步骤和用户微服务一样,完成创建。
4.2代码编写
4.2.1新创建一个包,编写启动类TicketServiceApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class TicketServiceApplication {
public static void main(String[] args) {
SpringApplication.run(TicketServiceApplication.class, args);
}
/*
* 向Spring容器中添加RestTemplate对象
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
4.2.2 新创建一个包,将用户微服务中的User实体拷贝到当前服务的对应保包中。
注意这里的User实体类还要做一些修改,要有默认的构造器,不然后面会报错。
public class User {
private Long id;
private String name;
public User() {
super();
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
4.2.3 新创建一个包,编写车票微服务的Service。
这里的话我们就简单的在车票微服务的Service中去调用用户微服务的接口,看一下是否可以成功进行服务间的通信。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.spring.ticketservice.pojo.User;
@Service
public class TicketService {
@Autowired
private RestTemplate restTemplate;
/*
* 查询车票信息时查询用户的信息(这里为了简化操作就不对车票信息进行查询,直接去调用查询用户信息的接口)
*/
public User queryTicketInfo(Long id) {
//向用户微服务中的接口发送请求的地址
String url = "http://localhost:8081/getUserInfo/"+ id;
return restTemplate.getForObject(url, User.class);
}
}
4.2.4 新创建一个包,编写车票微服务的Controller
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.spring.ticketservice.pojo.User;
import com.spring.ticketservice.service.TicketService;
@RestController
public class TicketController {
//注入service
@Autowired TicketService ticketService;
/*
* 查询车票信息的接口
*/
@GetMapping(value = "/getTicketInfo/{id}")
public User queryTicketInfo(@PathVariable("id") Long id) {
return ticketService.queryTicketInfo(id);
}
}
4.2.5在resources下创建application.properties配置文件,进行端口和编码配置
端口号配置为8082
4.3启动服务,进行测试
4.3.1启动UserService
找到UserServiceApplication右键–>Run As–>Spring Boot App
4.3.2启动TicketService
找到TicketServiceApplication右键–>Run As–>Spring Boot App
注:如果没有这个选项,在eclipse中下载STS插件就好了
4.3.3打开浏览器进行测试
打开浏览器访问地址:http://localhost:8082/getTiceketInfo/1,可以看到成功查询出了id为1的用户信息。说明我们已经成功在车票微服务中调用了用户微服务,微服务之间的通信成功。