SpringCloud 연구 노트 02 - 서비스 공급자 및 서비스 소비자


머리말

本文要记录的大概内容:

위의 내용은 마이크로서비스에 대한 간단한 이해와 이해이며, 이 글에서는 Spring Cloud에 대해 간략하게 소개하고 간단한 사례를 통해 Spring Cloud에 대한 간단한 입문 학습을 진행합니다.

시뮬레이션 장면:

快速搭建服务提供者与服务消费者并完成两个服务之间的交互。以电影院购票为例:用户通过电影微服务系统
(服务消费者)购票,电影微服务需要调用用户微服务(服务提供者)查询用户相关信息,账户余额、是否符
合购票标准等。

여기에 이미지 설명 삽입


提示:以下是本篇文章正文内容,下面案例可供参考

1. 스프링 클라우드 소개?

SpringCloud는 분산 시스템의 공통 패턴을 신속하게 구축하기 위한 도구 세트인 SpringBoot를 기반으로 구축되었습니다.
Spring Cloud를 사용하여 개발된 애플리케이션은 Docker 및 PaaS에 배포하기에 매우 적합하므로 클라우드 네이티브 애플리케이션이라고도 합니다. 클라우드 네이티브(Cloud Native)는 클라우드 환경을 위한 소프트웨어 아키텍처로 이해할 수 있습니다.

2. 스프링 클라우드의 특징

  1. 컨벤션 오버 / 오버 구성
  2. 다양한 환경에 적합합니다. PC Server 또는 다양한 클라우드 환경(Alibaba Cloud, Tencent Cloud, AWS 등)에서 개발 및 배포 가능
  3. 구성 요소의 복잡성을 숨기고 XML이 없는 선언적 구성 제공
  4. 즉시 사용 가능한 빠른 설정 및 시작
  5. 경량 부품. Spring Cloud에 통합된 대부분의 구성 요소는 Eureka, Zuul 등과 같이 상대적으로 경량입니다. 모두 해당 분야에서 경량 구현입니다.
  6. 풍부한 구성 요소와 완벽한 기능. Spring Cloud는 구성 관리, 서비스 검색, 회로 차단기, 마이크로서비스 게이트웨이 등과 같은 마이크로서비스 아키텍처를 완벽하게 지원합니다.
  7. 선택은 중립적이고 풍부합니다. 예를 들어 Spring Cloud는 Eureka, ZooKeeper 또는 Consul 등을 사용하여 서비스 검색을 지원합니다.
  8. 유연한. 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를 정상적으로 호출할 수 있음을 알 수 있습니다.

추천

출처blog.csdn.net/Shiny_boy_/article/details/125868754