SpringCloud全家桶之服务注册与发现(实战篇,陆续更新中........)

3 篇文章 0 订阅
2 篇文章 0 订阅

  在做分布式微服之前,先看看我的我的项目结构的目录,主要有两个Eureka服务组成的集群,其名字如图片中所示,名字就是cloud-eurka-server7001和cloud-eurka-server7001两个;第二部分为服务提供者,就是图中画红圈部分的coud-provider-payment8002和cloud-payment-8001,也是有两个服务器组成的微服集群,电脑好的通过可以多创建几个微服作为集群;最后就是微服的消费者,也可以创建多个微服作为集群,但是我电脑已经带不动了,所以仅一个,就是图中画红圈部分的cloud-consumer-order80,但是配置都是大同小异的,没什么影响。

  首先说说这三者之间的关系,简单地说,而eureka(即上述所说的cloud-eurka-server7001)是中间商,而服务提供者为服务消费者提供接口调用,消费者服务和服务提供者服务都要在注册中心注册。三者之间的关系如下图所示,其中消费端与服务端相对于注册中心来说都是客户:

  接下来将一步一步的实现简单Eureka分布式注册中心。

首先从服务提供者开始,也就是文件夹中的cloud-provider-payment8002和cloud-payment-8001,在创建他们的之间首先对整个项目创建一个parent工程,也就是项目目录中的cloud-2020,是一个不带框架的maven项目,全部的mudule全部依赖于这个服工程。

1.创建服务提供者

创建过程分为几个步骤(当然有些可以直接生成SpringBoot项目,但是这种方式不符合我的气质,也可以根据自己情况而定):1.创建mudule(建cloud-provider-payment8001);2.改POM文件;3.写YML;4.主启动;5.业务类

1.1创建mudule就不多说了,不要选择框架就行,把maven和编译环境配置正确就行

1.2 改POM文件,在对应的cloud-provider-payment8002下修改器pom.xml文件,就添加如下内容:

<dependencies>
        
        <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>
      以上是SpringBoot框架必须要有
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <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>

  1.3创建.yml文件,添加下文内容:

server:
  port: 8001 #配置服务端口

#配置服务相关别名与配置数据源     注意:其中数据库驱动可能有坑,可以找到自己能用的,不一定要用这个
spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

#配置mybatis的映射文件

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.springcloud.entities

1.4主启动,代码比较简单,如下文所示:

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

1.5 业务类

这一步比较关键,可以动手打,增加理解

1.数据库SQL语句,也可以自己写

CREATE TABLE payment (
 id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT ID,
 'serial' VARCHAR(200) DEFAULT,
 PRIMARY KEY(id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
2.实体类     其中注解@Data,@AllArgsConstructor,@NoArgsConstructor需要在idea中下载一个插件lombok才能使用,setting>plugins中搜索,并下载安装

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
    private Long id;
    private String serial;
}

Json封装体CommonResult

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult <T>{

    private Integer code;
    private String message;
    private T data;

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

 3. 持久层,也就是dao层,也是分为几部

1)接口PaymentDao,最好创建一个dao包,好管理,并创建相应的接口,在里面写方法。

2)mybatis的映射文件PaymentMapper.xml   在里面写SQL语句,绑定了dao层中的方法,每个SQL语句映射一个实体类。

4.service层,接口PaymentService,直接上代码了。

public interface PaymentService {

    public int create(Payment payment); //写

    public Payment getPaymentById(@Param("id") Long id);  //读取
}

其实现类为:


@Service
public class PaymentServiceImpl implements PaymentService {

    @Resource
    private PaymentDao paymentDao;

    public int create(Payment payment){
        return paymentDao.create(payment);
    }

    public Payment getPaymentById( Long id){

        return paymentDao.getPaymentById(id);

    }
}

5.controller层,也是直接上代码了。

@RestController
@Slf4j
public class PaymentController {

    @Resource
    private PaymentService paymentService;

    @PostMapping(value = "/payment/create")
    public CommonResult create(Payment payment){
       int result = paymentService.create(payment);
       log.info("*****插入结果:"+result);
       if (result>0){  //成功
           return new CommonResult(200,"插入数据库成功",result);
       }else {
           return new CommonResult(444,"插入数据库失败",null);
       }
    }
    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id){
        Payment payment = paymentService.getPaymentById(id);
        log.info("*****查询结果:"+payment);
        if (payment!=null){  //说明有数据,能查询成功
            return new CommonResult(200,"查询成功",payment);
        }else {
            return new CommonResult(444,"没有对应记录,查询ID:"+id,null);
        }
    }
}

启动项目以后,最后测试一下http://localhost:8001/payment/get/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值