SpringBoot+Dubbo+zookeeper服务注册发现实战

1.利用IDEA创建一个空项目

 

 

 2.创建一个模块(提供者服务):

 下一步:

 

下一步:

 

 

 

 

 下一步:

 

 

 创建模块成功,一般删除  .gitignore、HELP.md、mvnw、mvnw.cmd和.mvn文件夹。使项目看起来更清爽!!

 

 

 3.编写提供者服务

①创建java interface文件,名命为:TicketServer

package com.ckfuture.service;

public interface TicketServer {
    public String getTicket();
}

②创建 接口实现类,名命为TicketServerImpl


package com.ckfuture.service;

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

//服务注册与发现

@Service //可以被扫描到,在项目启动就自动注册到注册中心
@Component //使用了Dubbo后尽量不要用Service注解
public class TicketServerImpl implements TicketServer {

@Override
public String getTicket() {
return "<创客未来>";
}
}

③修改一下提供者服务的端口(provider-server/resources/application.properties)

server.port=8001

④导入dubbo和zookeeper的依赖,并处理日志冲突

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>

zookeeper的jar包是zkclient

<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>

成功导入:

 

 

 对于日志冲突的处理:

<!-- dubbo-spring-boot-starter-->
        <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-server/resources/application.properties)

server.port=8009

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

⑥启动provider-server服务并在dubbo-admin中查看

 

 

 

 

 

 

 

 

 

4.创建一个模块(消费者服务)

 

 

 

 

 

 ①导入相关依赖

<!-- dubbo-spring-boot-starter-->
        <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>

②修改配置(consumer-server/resources/application.properties)

server.port=8002

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

③创建一个UserServer.class 消费服务

package com.ckfuture.service;

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

@Service //放到容器中
public class UserService {

    //想拿到provider-server提供的服务,要去注册中心拿到服务
    @Reference //引用,Pom坐标,可以定义路径相同的接口名
    TicketServer ticketServer;

    public void buyTicket(){
        String ticket = ticketServer.getTicket();
        System.out.println("在注册中心获取一张票:"+ticket);

    }
}

在这里通过“Reference”获取注册中心的服务。在本地要建立提供者一样的TicketServer接口类。即“定义路径相同的接口名”,否则找不到服务提供者。

 

 

 ④在测试类中测试一下获取服务

package com.ckfuture;

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

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;


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

}

 

 

 

 

 

 如果运行消费者服务,在注册中心也可以查看到:

 

 

步骤:

前提:zookeeper服务要开启

1.提供者提供服务

  1).导入依赖

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

  3).在想要被注册的服务上面增加一个注解@Service

2.消费者如何消费

  1).导入依赖

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

  3).从远程注入服务 @Reference

posted @ 2021-02-14 11:25  创客未来  阅读(588)  评论(0编辑  收藏  举报