进阶SpringBoot之服务注册

新建一个空项目

SpringBoot 创建 Web 项目 provider-server(提供者、服务端)

service 包下创建 TicketService 接口,写个方法

java 复制代码
package com.demo.service;

public interface TicketService {
    public String getTicket();
}

service 包下创建 TicketServiceImpl 类,实现 TicketService 接口,重写方法

java 复制代码
package com.demo.service;

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

@DubboService
@Component
public class TicketServiceImpl implements TicketService{
    @Override
    public String getTicket() {
        return "Java";
    }
}

Maven 仓库

pom.xml 文件导入包,dubbo-spring-boot-starter、zkclient、zookeeper(排除 slf4j-log4j12)

XML 复制代码
        <!-- 导入依赖:Dubbo + Zookeeper -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>

        <!-- 引入Zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.3.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.3.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>

application.properties:

XML 复制代码
server.port=8001

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

开启 Zookeeper 和 Dubbo-admin 服务

SpringBoot 创建 Web 项目 consumer-server(消费者、客户端)

同理,pom.xml 文件导入相同依赖

application.properties:

XML 复制代码
server.port=8002

#消费者名字
spring.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

两个项目端口号不一致,就需要使用 HTTP 或者 RPC(远程过程调用)

把 TicketService 接口复制到 service 包下,保持和服务端相同的接口名(包名路径要相同)

service 包下创建 UserService 类,从注册中心拿到服务

java 复制代码
package com.demo.service;

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

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

    //去注册中心拿到服务
    @Reference //引用,Pom坐标,可以定义路径相同的接口名
    TicketService ticketService;

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

测试类:

java 复制代码
package com.demo;

import com.demo.consumerserver.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)在想要被注册的服务上面增加一个注解 @DubboService

2.消费者如何消费

1)导入依赖

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

3)从远程注入服务 @Reference

相关推荐
前端 贾公子28 分钟前
第06章:结构化输出 (上)
java·服务器·前端
念何架构之路35 分钟前
restartmanager-重启管理子系统
java·开发语言
Java内核笔记1 小时前
告别第三方库!Spring Boot 4 原生 API 版本控制全解析:4 种策略 + 实战案例
java·后端
小小洋洋1 小时前
OpenWrt 从U盘迁移到内置 eMMC,并完成扩容与 Docker 安装
java·docker·eureka
就改了2 小时前
SpringBoot 自定义线程池 + 实时监控指标
java·spring boot·后端
plainGeekDev2 小时前
运行时获取依赖 → 编译时注入
android·java·kotlin
玖石书3 小时前
ASP.NET Core 迁移至 Spring系列:类库框架篇
java·后端·asp.net
笨蛋不要掉眼泪3 小时前
RabbitMQ消息队列:延迟消息
java·rabbitmq·java-rabbitmq
Adios7944 小时前
搜索二维矩阵 II
java·数据结构·算法
摇滚侠4 小时前
《SpringBoot 3:入门与应用实战》第 15 章 生产级特性 监控指标 Metrics 阅读笔记
java·spring boot·笔记