手把手教你搭建SpringCloud Alibaba之生产者与消费者

SpringCloud Alibaba全集文章目录:


一、手把手教你搭建SpringCloud Alibaba之生产者与消费者

二、手把手教你搭建SpringCloudAlibaba之Nacos服务注册中心

三、手把手教你搭建SpringCloudAlibaba之Nacos服务配置中心

四、手把手教你搭建SpringCloudAlibaba之Nacos服务集群配置

五、手把手教你搭建SpringCloudAlibaba之Nacos服务持久化配置

六、手把手教你搭建SpringCloudAlibaba之Sentinel实现流量控制

七、手把手教你搭建SpringCloudAlibaba之Sentinel服务降级

八、手把手教你搭建SpringCloudAlibaba之Sentinel热点key限流

九、手把手教你搭建SpringCloudAlibaba之Sentinel系统保护规则

十、手把手教你搭建SpringCloudAlibaba之Sentinel服务熔断

十一、手把手教你搭建SpringCloudAlibaba之Sentinel规则持久化

十二、手把手教你搭建SpringCloudAlibaba之Seata分布式事务
​​​​​​​

IDEA不会搭建的同学请看上个系列文章,点击跳转 -------------->手把手教你搭建SpringCloud项目

1、直接贴父项目的pom文件



    4.0.0

    com.study.springcloud
    springcloud
    
    pom
    1.0-SNAPSHOT

    
    
       
    


    
        UTF-8
        1.8
        1.8
        5.1.47
        1.1.10
        4.1.2
        1.16.10
        1.2.17
    
    
    
        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Hoxton.SR1
                pom
                import
            

            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import
            

            
            
                org.springframework.boot
                spring-boot-dependencies
                2.2.2.RELEASE
                pom
                import
            


            
            
                mysql
                mysql-connector-java
                ${mysql.version}
            
            
                com.alibaba
                druid
                ${druid.version}
            
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                1.3.2
            

            
            
                junit
                junit
                4.12
            
            
            
                org.projectlombok
                lombok
                1.18.8
            

            
            
                log4j
                log4j
                ${log4j.vsrsion}
            
            
                ch.qos.logback
                logback-core
                1.2.3
            
        
    


2、新建Module命名为cloud-api-commons,用来存放实体类和公用的类。如下图:

手把手教你搭建SpringCloud Alibaba之生产者与消费者_第1张图片

使用到的pom文件:



    
        springcloud
        com.study.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-api-commons
    
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
        
            cn.hutool
            hutool-all
            5.1.0
        
    

 创建生产者实体类Payment

package com.buba.springcloud.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Payment implements Serializable {
    private Long id;
    // 微服务 一个服务对应一个数据库,同一个信息可能存在不同的数据库
    private  String serial;
}

为了数据传输的方便,也为了前后端分离项目,我们将返回的数据进行封装,封装成一个实体类。

package com.buba.springcloud.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class CommonResult {

    private Integer code;//返回状态码
    private String  message;//返回是否调用成功
    private  T data; //返回的数据

    public CommonResult(Integer code, String message) {
        this(code,message,null);
    }

}

我们首先将该工程clean,确保当前工程的maven的配置是否成功。

出现如下界面说明当前工程的maven配置环境没有问题

那接下来我们就开始install打包放到本地库中。如下为成功界面:

此时我们可以看到我们总工程的pom.xml文件成功引入了cloud-api-commons,如下图:

 3、新建生产者Module命名为cloud-provide-payment,生产者我们可以这样理解就是我们的服务端,是我们使用代码写的业务逻辑接口,而消费者就是我们用户,用户通过app或者web调用我们生产者服务端的接口,获取信息。我们首先搭建一个专门放我们支付业务的服务,来让其他服务来调用使用。支付服务就是其中的一个生产者。

 目录结构如下:

手把手教你搭建SpringCloud Alibaba之生产者与消费者_第2张图片

pom文件:



    
        springcloud
        com.study.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-provide-payment

    

        
        
            com.study.springcloud
            cloud-api-commons
            ${project.version}
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

在resources文件下新建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.payment;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
public class PayMentMain {
    public static void main(String[] args) {
        SpringApplication.run(PayMentMain.class,args);
    }
}

下面开始写业务,就是三层结构,如下图:

 PaymentDao.java代码

package com.buba.payment.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.payment.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.payment.serviceImp;

import com.buba.payment.dao.PaymentDao;
import com.buba.payment.service.PaymentService;
import com.buba.springcloud.pojo.Payment;
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.payment.controller;


import com.buba.payment.service.PaymentService;
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.*;

@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,"插入数据库成功",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,"查询成功",payment);
        }else{
            return new CommonResult(444,"查询失败",null);
        }
    }

}

在resources\dao\文件夹下新建PaymentDao.xml文件,与PaymentDao映射,这里注意新建要新建spring的可识别的配置的xml文件,不会报错说找不到方法。




 
    
        
        
    

    
        insert into payment (serial) values (#{serial});
    

    

 4、新建消费者者Module命名为cloud-consumer-order,用来调用我们生产者的服务。

 目录结构如下:

手把手教你搭建SpringCloud Alibaba之生产者与消费者_第3张图片

使用到的pom文件:



    
        springcloud
        com.study.springcloud
        1.0-SNAPSHOT
    
    4.0.0

    cloud-consumer-order
          

        
            
            com.study.springcloud
            cloud-api-commons
            ${project.version}
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            com.study.springcloud
            cloud-api-commons
            1.0-SNAPSHOT
            compile
        

    


在resources文件下新建application.yml配置文件

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

启动类代码

package com.buba.consumer;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@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.consumer.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();
    }
}

消费者的业务调用接口OrderController.java

package com.buba.consumer.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 create(Payment payment){
        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment, CommonResult.class);
    }
    //获取id获取支付订单
    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult getPayment(@PathVariable("id") Long id) {
        return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);

    }
}

公共服务,生产者服务和消费者服务就搭建完成啦。那我们现在就测试一下看看,支付消费者能否成功调用支付生产者。分别启动两个工程。首先自测一下生产者的服务是否可以访问,端口为8001,访问http://localhost:8001/payment/get/1,如下图可以访问成功,说明生产者的服务是没有问题的。

手把手教你搭建SpringCloud Alibaba之生产者与消费者_第4张图片

我们消费者的端口配置为80,访问就可以省略端口,直接输入:http://localhost/consumer/payment/get/1访问。成功获取到id为1的支付订单。

手把手教你搭建SpringCloud Alibaba之生产者与消费者_第5张图片

现在两个服务之间就可以调用啦。下节直接加入Ncaos,将这两个服务注册到我们Nacos当中。

 ​​​​​​​

你可能感兴趣的:(微服务学习篇,Spring学习篇,java,spring,cloud)