記事ディレクトリ
序文
本文要记录的大概内容:
以上がマイクロサービスの簡単な理解と理解でしたが、この記事では Spring Cloud について簡単に紹介し、簡単なケースを通して Spring Cloud の簡単な入門学習を行います。
シミュレーションシーン:
快速搭建服务提供者与服务消费者并完成两个服务之间的交互。以电影院购票为例:用户通过电影微服务系统
(服务消费者)购票,电影微服务需要调用用户微服务(服务提供者)查询用户相关信息,账户余额、是否符
合购票标准等。
提示:以下是本篇文章正文内容,下面案例可供参考
1. Spring Cloud の概要?
SpringCloud は、分散システムの共通パターンを迅速に構築するためのツール セットである SpringBoot に基づいて構築されています。
Spring Cloud を使用して開発されたアプリケーションは、Docker や PaaS へのデプロイに非常に適しているため、クラウド ネイティブ アプリケーションとも呼ばれます。クラウド ネイティブ (Cloud Native) は、クラウド環境のためのソフトウェア アーキテクチャとして理解できます。
2. Spring Cloudの特徴
- コンフィギュレーション上/コンフィギュレーション上での規約
- さまざまな環境に適しています。PCサーバーや各種クラウド環境(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. エディターを開き、ナビゲーション バーで [ファイル]、[新規]、[プロジェクト] の順にクリックし、次に示すように Spring Initializr を選択します。
项目属性说明
Name:更友好的项目名,默认同Artifact保持一致 Location:项目存储位置 Language:开发语言 Type:类型,项目管理工具 Group:项目组织的唯一标识符 Artifact:项目名称 Pacjage name:包名,默认为Group+Artifact,可以手动更改。表示的main/java/目录下的包名 Project SDK:项目使用的工具包 Java:语言版本 Packing:打包方式
2. 以下の図に示すように、[次へ] –> を選択し、SpringBoot バージョンを選択し、必要に応じてプロジェクトの依存関係を選択します。選択した依存関係パッケージが右側に表示されます (Spring Boot DevTools は、アプリケーションの高速な再起動、リアルタイムの読み込みと構成を提供します。 Spring Web は Spring MVC を使用して、RESTful アプリケーションや @Controller、@RestController などの一般的なアノテーションを含む Web アプリケーションを構築します。MySQL ドライバーは MySQ 用の JDBC ドライバーと R2DBC ドライバーを提供します。JDBC API は、クライアントの接続方法、データベースのクエリ方法、およびデータベースのクエリ方法を定義するための API を提供します。データベース接続; MyBatis フレームワークはデータ永続性フレームワークです; プロジェクトの作成時に選択されていない依存関係は、プロジェクトで使用されている場合は pom.xml で柔軟に設定できます) 3. [完了] をクリックすると、プロジェクトが作成され、
注意:1. 选择了MyBatis Framework其实就可以不用选JDBC API的依赖了 2. 需要配置好maven,不然依赖包会下载失败
pom ファイルを開いてエラーを報告します。以下に示すように:
解決策: バージョン番号を手動で追加します
- コマンドラインツール Spring Boot CLI 経由
2. 設定ファイルを書き込む
application.properties はプロジェクト作成時にデフォルトで生成されますが、設定ファイルとして yml ファイルを使用することを推奨します (可読性は高いですが、2 つのうちの 1 つしか残せません)。私の設定は次のとおりです。
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);
}
}
アクセステスト
要約する
提示:这里对文章进行总结:
以上が今日学んだことですが、上図に示した最終テスト結果は、ムービーマイクロサービスがユーザーマイクロサービスのAPIを正常に呼び出せることを示しています。