SpringCloudプロジェクトの構築方法を教えます(2)プロデューサーとコンシューマー

マイクロサービスとは何ですか? シリーズが一目でわかる!

1. SpringCloudプロジェクトのビルド方法を教えます (1) 写真とテキストで詳しく説明、アホのような操作

2. SpringCloud プロジェクトの構築方法を教える (2) プロデューサーとコンシューマー

3. SpringCloudプロジェクトの構築方法を教えます (3) Eurekaサービス登録センターの統合

4. SpringCloudプロジェクトの構築方法を教えます (4) Eurekaクラスタのバージョン構築

5. SpringCloudプロジェクトのビルド方法を教えます (5) プロデューサークラスターバージョンをビルドします

6. SpringCloudプロジェクトの構築方法を教えます (6) Eurekaはサービスディスカバリを実現します

7. SpringCloudプロジェクトの構築方法を教える (7) Consulサービス登録センターを統合する

8. SpringCloudプロジェクトの構築方法を教えます (8) 統合リボンロードバランサ

9. SpringCloud プロジェクトの構築方法を説明します (9) OpenFeign サービス インターフェイス呼び出しの統合

10. SpringCloud プロジェクトの構築方法を教えます (10) Hystrix サービスのダウングレードの統合

11. SpringCloud プロジェクトの構築を教える (11) Hystrix のサービス ヒューズの統合

12. SpringCloud プロジェクトの構築方法を教える (12) Hystrix のグラフィカル ダッシュボードのリアルタイム モニタリングを統合する

13. SpringCloud プロジェクトの構築方法を教える (13) 新世代のゲートウェイを統合する

14. SpringCloudプロジェクトの構築方法を教えます (14) Integrated Config Distributed Configuration Center

15. SpringCloudプロジェクトの構築方法を教えます (15) Integrated Busメッセージバス

16. SpringCloud プロジェクトの構築方法を説明します (16) 統合された Stream メッセージ ドライバー

17. SpringCloud プロジェクトの構築方法を説明します (17) Sleuth 分散リンク追跡の統合

これからも更新していきますので、いいねやフォロー大歓迎です!
前の記事の続きです。前の記事では、一般的なプロジェクトとエンティティのマイクロサービスの構築が完了しました。この記事では、プロデューサーとコンシューマーの構築を続けます。プロデューサーがサーバーであることが理解できます。ビジネス ロジック インターフェイスをコードで記述します。コンシューマはユーザーであり、情報を取得するためにアプリまたは Web 経由でサーバーのインターフェイスを呼び出します。次に、直下に構築し、プロジェクトから学習します。

まず、他のサービスがそれを呼び出して使用できるように、決済ビジネス専用のサービスを構築します。Payment Services もそのようなプロデューサーの 1 つです。

1. 新しいプロデューサーを作成する

以下に示すように、親プロジェクトを選択して「新規」をクリックし、「モジュール」をクリックします。
ここに画像の説明を挿入

「次へ」をクリックします。
ここに画像の説明を挿入

「次へ」に進み、「完了」をクリックします。
ここに画像の説明を挿入

pom.xml ファイルを変更し、依存関係を追加します。特定のバージョンは一般プロジェクトで管理され、他のバージョンもこのプロジェクトで使用できます。エンティティ クラスをインポートするパッケージに注目してください。

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mcroservice</artifactId>
        <groupId>com.study.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>cloudprovidepayment</artifactId>
    <dependencies>
     <-- 引入实体的包-->
        <dependency>
            <groupId>com.study.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
 
</project>

リソース ファイルの下に新しい application.yml 構成ファイルを作成します。

server:
  port: 8001 #服务端口
#spring相关配置
spring:
  application:
    name: mcroservice-payment  #服务名
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  #当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver  #数据库驱动包
    url: jdbc:mysql://localhost:3306/db01?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
    username: root
    password: roo
#mybatis:配置
mybatis:
  mapperLocations: classpath:dao/*.xml
  type-aliases-package: com.buba.springcloud.pojo    # 所有pojo别名类所在包

スタートアップクラスを書く

package com.buba.springclould;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 
@SpringBootApplication
public class PayMentMain {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(PayMentMain.class,args);
    }
}

以下の図に示すように、3 層構造であるビジネスを書き始めましょう。
ここに画像の説明を挿入

PaymentDao.java コード

package com.buba.springclould.dao;
import com.buba.springcloud.pojo.Payment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
 
@Mapper
@Repository
public interface PaymentDao {
    
    
   int create(Payment payment);
   Payment queryById(@Param("id")long id);
 
}
PaymentService.java代码

package com.buba.springclould.service;
 
import com.buba.springcloud.pojo.Payment;
import org.apache.ibatis.annotations.Param;
public interface PaymentService {
    
    
 
    int create(Payment payment);
 
    Payment queryById(@Param("id")long id);
}

PaymentImple.java コード

package com.buba.springclould.service;
 
import com.buba.springcloud.pojo.Payment;
import com.buba.springclould.dao.PaymentDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class PaymentImple implements PaymentService {
    
    
    @Autowired
    PaymentDao paymentDao;
    @Override
    public int create(Payment payment) {
    
    
        return paymentDao.create(payment);
    }
 
    @Override
    public Payment queryById(long id) {
    
    
        return paymentDao.queryById(id);
    }
}

PaymentControler.java コード

package com.buba.springclould.controller;
 
 
import com.buba.springcloud.pojo.CommonResult;
import com.buba.springcloud.pojo.Payment;
import com.buba.springclould.service.PaymentService;
 
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
 
 
/*
* 提供restful服务  供其他服务调用
*
* */
@RestController
@Slf4j
public class PaymentControler {
    
    
    @Autowired
    private PaymentService paymentService;
 
    @PostMapping("/payment/create")
    public CommonResult create(@RequestBody Payment dept){
    
    
        int i = paymentService.create(dept);
        log.info("***************插入成功*******"+i);
        if(i>0){
    
    
            return new CommonResult(200,"插入数据库成功"+serverPort,i);
        }else{
    
    
            return new CommonResult(444,"插入数据库失败",null);
        }
    }
    @GetMapping("/payment/get/{id}")
 
    public CommonResult queryById(@PathVariable("id") Long id){
    
    
        Payment payment = paymentService.queryById(id);
        log.info("***************查询成功*********"+payment);
        if(payment!=null){
    
    
            return new CommonResult(200,"查询成功"+serverPort,payment);
        }else{
    
    
            return new CommonResult(444,"查询失败",null);
        }
    }
    
}

Resources\dao\ フォルダーの下に新しい PaymentDao.xml ファイルを作成し、PaymentDao にマップします。ここでは、Spring 用の認識可能な構成で XML ファイルを作成することに注意してください。メソッドが見つからないというエラーは報告されません。 。以下に示すように:

ここに画像の説明を挿入

以下に示すように、新しい PaymentDao.xml ファイルを作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dqueryByidtd/mybatis-3-mapper.dtd">
 
 
<mapper namespace="com.buba.springclould.dao.PaymentDao">
    <resultMap id="BaseResultMap" type="com.buba.springcloud.pojo.Payment">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <id column="serial" property="serial" jdbcType="VARCHAR"/>
    </resultMap>
 
    <insert id="create" parameterType="com.buba.springcloud.pojo.Payment" useGeneratedKeys="true" keyProperty="id">
        insert into payment (serial) values (#{serial});
    </insert>
 
    <select id="queryById" resultType="com.buba.springcloud.pojo.Payment" parameterType="Long" resultMap="BaseResultMap">
        select * from payment  where id = #{id};
    </select>
 
 
</mapper>

2. 新しい消費者向けサービスを作成する

オーダーのサーバー プロジェクト (プロデューサー) の構築が完了しました。次に、オーダーのクライアント プロジェクト (コンシューマー) の構築を開始します。以下に示すように、親プロジェクトを選択して「新規」をクリックし、「モジュール」をクリックします。
ここに画像の説明を挿入

「次へ」をクリックしてプロジェクト名を入力します。
ここに画像の説明を挿入

「次へ」に進み、プロジェクト名を確認し、「完了」をクリックしてオーダー・サービス・プロジェクトの作成を完了します。

ここに画像の説明を挿入

pom.xml ファイルの構成と変更を開始して、依存関係を追加します。特定のバージョンは一般プロジェクトで管理され、他のバージョンもこのプロジェクトで使用できます。エンティティ クラスをインポートするパッケージに注目してください。

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.study.springcloud</groupId>
        <artifactId>mcroservice</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>cloud-consumer-order</artifactId>
    <dependencies>       
        <dependency>
             <-- 引入实体的包-->
            <groupId>com.study.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.study.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
 
</project>

リソース ファイルの下に新しい application.yml 構成ファイルを作成します。

server:
  port: 80
spring:
  application:
    name: mcroservice-order  #服务名

スタートアップクラスを書く

package com.buba.springclould.order;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 
@SpringBootApplication
public class OrderMain {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderMain.class,args);
    }
}

新しい RestTemplate 構成クラスを作成し、Spring の ioc コンテナーに挿入します。

ここでのサービス間の呼び出しには RestTemplate を使用します. RestTemplate はリモートの Http サービスにアクセスするためのさまざまな便利なメソッドを提供します. Restful サービスにアクセスするためのシンプルで便利なテンプレート クラスです. Spring が提供する Rest サービスにアクセスするためのクライアント テンプレートです.ツールセット。

package com.buba.springclould.order.config;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
 
@Configuration
public class ApplicationContextConfig {
    
    
    @Bean
    public RestTemplate getRestTemplate(){
    
    
        return new RestTemplate();
    }
}

消費者のビジネスコールインターフェイスを作成する

package com.buba.springclould.order.controller;
 
 
import com.buba.springcloud.pojo.CommonResult;
import com.buba.springcloud.pojo.Payment;
import lombok.extern.slf4j.Slf4j;
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 org.springframework.web.client.RestTemplate;
 
@RestController
@Slf4j
public class OrderController {
    
    
    //调用支付订单服务端的ip+端口号
    public static final  String PAYMENT_URL = "http://localhost:8001";
    
    @Autowired
    private RestTemplate restTemplate;
    //创建支付订单的接口
    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment){
    
    
        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment, CommonResult.class);
    }
    //获取id获取支付订单
    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
    
    
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }
}

3. サービス間通話テスト

プロデューサとコンシューマが設定されます。次に、支払いコンシューマが支払いプロデューサーを正常に呼び出すことができるかどうかをテストしてみましょう。2 つのプロジェクトを別々に開始します。まず、プロデューサーのサービスにアクセスできるかどうかを確認します。下図に示すように、ポートは 8001 で、正常にアクセスでき、プロデューサーのサービスに問題がないことがわかります。

ここに画像の説明を挿入

コンシューマのポートは 80 に設定されており、アクセスする場合はポートを省略して、http://localhost/consumer/payment/get/1 と直接入力してアクセスできます。ID 1 の支払い注文を正常に取得しました。

ここに画像の説明を挿入

この時点で、springcloud の単純な構築は成功しました。とても簡単ではありませんか!

ここに画像の説明を挿入

次の記事では、決済サーバー クラスターを構築し、eureka サービスの登録と検出を統合します。フォローといいねを続けてください。引き続き更新していきます。

おすすめ

転載: blog.csdn.net/weixin_39570655/article/details/131764363