40.0、springboot-服务注册开发实战初体验【初体验】

【注意嗷~】:写这个项目前要先安装配置好zookeeper和dubbo。不太了解这个,或者不会安装的同学可以先去我的专栏《springboot学习总结》看看《39.0、zookeeper和dubbo的安装》很详细~

        首先咱们创建两个springboot模块,分别为provider-service和consumer-service

分别代表:服务端 和 消费者

两个模块都在pom.xml中导入以下相关依赖:

<!--导入依赖:Dubbo + zookeeper-->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>
<!--导入zkclient-->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
<!--解决日志的冲突问题,引入zookeeper-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>2.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>2.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
    <!--排除这个slf4j-log4j12-->
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

        在provider-service模块中创建一个service文件夹,在这里面里写一个接口TicketService和,他的实现类 TicketServiceImpl

分别如下:
TicketService.java:

package com.hkl.service;
public interface TicketService {
    public String getTicket();
}

TicketServiceImpl.java:

package com.hkl.service;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Service//可以被扫描到,在项目启动就自动注册到注册中心,注意这里的Service注释是dubbo包下的不是spring下的
@Component//使用了Dubbo后尽量不要使用Service注解
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "获得了一张票";
    }
}

     这里要【注意】导入的@Service注释是dubbo包下的,不是spring下的千万不要导错了,

所以为了区分,这里就直接用@Component注释来标注而不用@Service来

        在provider-service模块application.properties文件里配置一下相关信息:
application.properties文件:

server.port=8001

#服务应用名字
dubbo.application.name=provider-service
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.hkl.service

配置端口,是因为待会儿要同时启动两个项目,所以要修改默认端口,改成两个不同的端口

        在【consumer-service】模块中创建一个service文件夹下创建一个

UserService.java文件如下:

package com.hkl.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service//放到容器中
public class UserService {
    //想拿到provicer-service提供的票,要去注册中心拿到服务
    @Reference//两种方法:第一种引用,第二种Pom坐标,可以定义路径相同的接口名
    TicketService ticketService;

    public  void buyTicket() {
        String ticket = ticketService.getTicket();
        System.out.println("在注册中心拿到=>"+ticket);
    }
}

Application.properties配置文件:

server.port=8002

#消费者去哪里拿服务需要暴露自己的名字
dubbo.application.name=consumer-service
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

在comsumer-service模块的测试类中:

package com.hkl;

import com.hkl.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServiceApplicationTests {

    @Autowired
    UserService userService;
    
    @Test
    void contextLoads() {
        userService.buyTicket();
    }
}

        然后依次启动zookeeper服务器,dubbo的后台管理,provider-service项目,comsumer-service项目,最后启动comsumer-service的测试类

        能看到后台输出了  在注册中心拿到=>获得了一张票 这段话,

这里主要体验一下,一个项目从另一个项目中调取函数使用

【注意嗷!!!】上面dubbo的配置是不完整的,只是为了初步体验一下服务调用,真正用到dubbo注册中心的时候,基本配置如下:

        provider服务提供者 application.yaml 如下:

dubbo:
  application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者
    name: online-retailer-provider #dubbo提供者的别名,只是个标识
#    注册中心地址
  registry: #注册中心配置,用于配置连接注册中心相关信息
    address: zookeeper://127.0.0.1:2181 #zk地址
  protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定消费方被动接受
    name: dubbo #dubbo协议
    port: 20880 #duboo端口号
  scan: 
    base-packages: com.hkl.service #服务暴露与发现消费者所在的package

        comsumer消费者 application.yaml 如下:

dubbo:
  application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者
    name: online-retailer-web
  registry: #注册中心配置,用于配置连接注册中心相关信息。
    address: zookeeper://127.0.0.1:2181 #zk地址
  protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
    name: dubbo #dubbo协议
    port: 20880 #duboo端口号
  scan:
    base-packages: com.hkl.service #服务暴露与发现消费所在的package