分布式Dubbo+Zookeeper+Springboot

看完狂神视频之后的综合理解,但是自己本身的问题还有不是很会导包,既对导包的版本不是很理解,老是因为版本问题导致项目启动失败

提供者提供服务

前提:启动zookeeper

1.导入依赖

 
        
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
            <version>2.7.3version>
        dependency>

        
        
        <dependency>
            <groupId>com.github.sgroschupfgroupId>
            <artifactId>zkclientartifactId>
            <version>0.1version>
        dependency>

        
        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-frameworkartifactId>
            <version>2.12.0version>
        dependency>

        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-recipesartifactId>
            <version>2.12.0version>
        dependency>
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.4.14version>
            
            <exclusions>
                <exclusion>
                    <groupId>org.slf4jgroupId>
                    <artifactId>slf4j-log4j12artifactId>
                exclusion>
            exclusions>
        dependency>

2.配置注册中心的地址,以及服务发现 名,和要扫描的包

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

3.在想要被注册的服务上面,增加一个@Service(这个是Dubbo的Service)

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

// zookeeper 服务注册与发现

@Service //可以被扫描到,在项目启动就会自动注册到注册中心
@Component //使用了Dubbo后尽量不要使用Service注解
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "dage";
    }
}

消费者如何消费

1.导入依赖

 
        
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
            <version>2.7.3version>
        dependency>

        
        
        <dependency>
            <groupId>com.github.sgroschupfgroupId>
            <artifactId>zkclientartifactId>
            <version>0.1version>
        dependency>

        
        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-frameworkartifactId>
            <version>2.12.0version>
        dependency>

        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-recipesartifactId>
            <version>2.12.0version>
        dependency>
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.4.14version>
            
            <exclusions>
                <exclusion>
                    <groupId>org.slf4jgroupId>
                    <artifactId>slf4j-log4j12artifactId>
                exclusion>
            exclusions>
        dependency>

2.配置注册中心的地址,配置自己的服务名

server.port=8081

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

3.从远程注入服务

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

@Service // 放到容器中
public class UserService {
    /**
     * 想拿到provider-server提供的Ticket
     * */
    @Reference//引用,Pom坐标,可以定义路径相同的接口名
    TicketService ticketService;

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

这里的TicketService需要在本项目中的同结构(与提供者的结构需要一样)下含有
在这里插入图片描述

可以不实现(不用impl)。

问题:

启动不了的原因可能是

  • 生产者&消费者服务结构目录一致
  • 版本问题
    这个借鉴于启动Dubbo服务Injection of @DubboReference dependencies is failed

你可能感兴趣的:(笔记,zookeeper,分布式,spring,boot)