기사 디렉토리
머리말
本文要记录的大概内容:
위의 내용은 마이크로서비스에 대한 간단한 이해와 이해이며, 이 글에서는 Spring Cloud에 대해 간략하게 소개하고 간단한 사례를 통해 Spring Cloud에 대한 간단한 입문 학습을 진행합니다.
시뮬레이션 장면:
快速搭建服务提供者与服务消费者并完成两个服务之间的交互。以电影院购票为例:用户通过电影微服务系统
(服务消费者)购票,电影微服务需要调用用户微服务(服务提供者)查询用户相关信息,账户余额、是否符
合购票标准等。
提示:以下是本篇文章正文内容,下面案例可供参考
1. 스프링 클라우드 소개?
SpringCloud는 분산 시스템의 공통 패턴을 신속하게 구축하기 위한 도구 세트인 SpringBoot를 기반으로 구축되었습니다.
Spring Cloud를 사용하여 개발된 애플리케이션은 Docker 및 PaaS에 배포하기에 매우 적합하므로 클라우드 네이티브 애플리케이션이라고도 합니다. 클라우드 네이티브(Cloud Native)는 클라우드 환경을 위한 소프트웨어 아키텍처로 이해할 수 있습니다.
2. 스프링 클라우드의 특징
- 컨벤션 오버 / 오버 구성
- 다양한 환경에 적합합니다. PC Server 또는 다양한 클라우드 환경(Alibaba Cloud, Tencent Cloud, AWS 등)에서 개발 및 배포 가능
- 구성 요소의 복잡성을 숨기고 XML이 없는 선언적 구성 제공
- 즉시 사용 가능한 빠른 설정 및 시작
- 경량 부품. Spring Cloud에 통합된 대부분의 구성 요소는 Eureka, Zuul 등과 같이 상대적으로 경량입니다. 모두 해당 분야에서 경량 구현입니다.
- 풍부한 구성 요소와 완벽한 기능. Spring Cloud는 구성 관리, 서비스 검색, 회로 차단기, 마이크로서비스 게이트웨이 등과 같은 마이크로서비스 아키텍처를 완벽하게 지원합니다.
- 선택은 중립적이고 풍부합니다. 예를 들어 Spring Cloud는 Eureka, ZooKeeper 또는 Consul 등을 사용하여 서비스 검색을 지원합니다.
- 유연한. Spring Cloud의 구성 요소가 분리되어 개발자가 필요에 따라 기술 옵션을 유연하게 선택할 수 있습니다.
3. 실전을 위한 전제 조건
1. 기술 준비금
-
스프링부트
SpringCloud是基于SpringBoot构建的,因此它延续了SpringBoot的锲约模式以及开发方式
-
개발 언어
SpringCloud是一个基于Java语言的工具套件,所以学习它需要一定的Java基础。Spring Cloud 支持使用Scala、Groovy等语言进行开发。
2. 개발 도구
-
JDK
JDK版本需要大于等于1.8
-
IDE
使用eclipse、idea、或者Spring Tool Suite均可
-
메이븐
maven的版本应该选择大于3.3.X及以上
4. 서비스 소비자 및 공급자 작성
1. 서비스 제공자 작성
서비스 제공자로서 사용자 마이크로서비스 작성, 기능: 직원 번호를 통해 직원 관련 정보를 쿼리합니다. 이 서비스는 지속성 계층 프레임워크로 Mybatis를 사용하고 데이터베이스로 Mysql을 사용합니다.
1. 프로젝트 빌드
수동으로 Class, yml, xml을 작성하여 프로젝트를 빌드하는 것 외에도 일반적으로 사용되는 방법은 다음과 같습니다.
-
웹을 통해
访问 https://start.spring.io/如下图:可以选择开发语言、版本、填写 项目的相关信息
-
개발 도구를 통해(이 기사에서는 IDEA를 예로 들었습니다.)
1. 편집기를 열고 탐색 모음에서 File->New->Project를 클릭하고 아래와 같이 Spring Initializr를 선택합니다.
项目属性说明
Name:更友好的项目名,默认同Artifact保持一致 Location:项目存储位置 Language:开发语言 Type:类型,项目管理工具 Group:项目组织的唯一标识符 Artifact:项目名称 Pacjage name:包名,默认为Group+Artifact,可以手动更改。表示的main/java/目录下的包名 Project SDK:项目使用的工具包 Java:语言版本 Packing:打包方式
2. 아래 그림과 같이 Next->를 선택하고 SpringBoot 버전을 선택하고 필요에 따라 프로젝트 종속성을 선택하면 오른쪽에 내가 선택한 종속성 패키지가 있습니다(Spring Boot DevTools는 빠른 애플리케이션 재시작, 실시간 로딩 및 구성을 제공합니다. Spring Web은 Spring MVC를 사용하여 RESTful 애플리케이션 및 @Controller, @RestController와 같은 일반적인 주석을 포함하는 웹 애플리케이션을 구축합니다. 데이터베이스 연결, MyBatis 프레임워크는 데이터 지속성 프레임워크임, 프로젝트 생성 시 선택하지 않은 종속성은 프로젝트에서 사용하는 경우 pom.xml에서 유연하게 구성할 수 있음) 3.
注意:1. 选择了MyBatis Framework其实就可以不用选JDBC API的依赖了 2. 需要配置好maven,不然依赖包会下载失败
완료를 클릭하면 프로젝트가 생성되고, pom 파일을 열고 오류를 보고합니다. 아래 그림과 같이:
솔루션 : 수동으로 버전 번호 추가
- 명령줄 도구 Spring Boot CLI를 통해
2. 구성 파일 작성
application.properties는 프로젝트 생성 시 기본적으로 생성되지만 yml 파일을 구성 파일로 사용하는 것을 권장하며(가독성이 높지만 둘 중 하나만 남을 수 있음) 내 구성은 다음과 같습니다.
server:
port: 8060
servlet:
context-path: "/api"
spring:
datasource:
url: jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: ******
password: ******
3. api, 서비스, 매퍼 작성
api接口层:
package com.example.user.api;
import com.example.user.dto.UserDto;
import com.example.user.service.UserService;
import com.example.user.util.ResponseMsg;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/userApi")
public class UserApi {
@Autowired
private UserService userServce;
@GetMapping("/getUserMsgById/{id}")
public ResponseMsg<UserDto> getUserMsg(@PathVariable("id") Integer id){
UserDto user = userServce.getUserMsgById(id);
return ResponseMsg.success(user);
}
}
Service层(分为接口和实现类,这里只写实现类):
package com.example.user.service.impl;
import com.example.user.dto.UserDto;
import com.example.user.entity.User;
import com.example.user.mapper.UserMapper;
import com.example.user.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public UserDto getUserMsgById(Integer id) {
User user = userMapper.queryById(id);
UserDto userDto = null;
if(user != null){
userDto = new UserDto();
BeanUtils.copyProperties(user,userDto);
}
return userDto;
}
}
数据层:
package com.example.user.mapper;
import com.example.user.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
User queryById(Integer id);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.user.mapper.UserMapper">
<select id="queryById" parameterType="java.lang.Integer" resultType="com.example.user.entity.User">
select *
from t_user
where id = #{id}
</select>
</mapper>
4. 테스트
postman测试截图:
2. 서비스 소비자 작성
由于步骤基本一致,前面一样的步骤就省略啦!
구성 파일
사용자 서비스와 비교하여 포트 번호만 수정
server:
port: 8061
구성 클래스
RestTemplate은 타사 RESTful API 인터페이스에 액세스하기 위한 네트워크 요청 프레임워크입니다. 이 문서는 사용자 마이크로 서비스를 요청하는 데 사용됩니다. 구성은 다음과 같습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
인터페이스 레이어
import com.example.movie.dto.UserDto;
import com.example.movie.util.ResponseMsg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
@RestController
@RequestMapping("/movieApi")
public class MovieApi {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getUserMsgById")
public ResponseMsg<UserDto> getUserMsg(@RequestParam("id") Integer id){
UserDto user = new UserDto();
ResponseMsg<UserDto> userResponse = restTemplate.getForObject("http://localhost:8060/api/userApi/getUserMsgById/"+id,ResponseMsg.class);
if(userResponse != null){
Map<String,Object> map = (Map<String, Object>) userResponse.getEntity();
for(String key : map.keySet()){
if(key.equals("name")){
user.setName((String) map.get(key));
}else if(key.equals("user_name")){
user.setUser_name((String) map.get(key));
}else if(key.equals("age")){
user.setAge((Integer) map.get(key));
}else if(key.equals("balance")){
user.setBalance((Double) map.get(key));
}
}
}
return ResponseMsg.success(user);
}
}
액세스 테스트
요약하다
提示:这里对文章进行总结:
이상은 오늘 배운 내용인데, 위 그림과 같이 최종 테스트 결과 movie 마이크로서비스가 사용자 마이크로서비스의 API를 정상적으로 호출할 수 있음을 알 수 있습니다.