Spring cloud实现微服务最简单的入门demo(Spring cloud学习笔记 2)

前言:

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的用户信息。说明我们已经成功在车票微服务中调用了用户微服务,微服务之间的通信成功。
在这里插入图片描述

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值