进阶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

相关推荐
LiLiYuan.15 分钟前
【Java 6种线程状态】
java·开发语言
itzixiao1 小时前
L1-047 装睡 (5分)[java][python]
java·开发语言·python
用户298698530141 小时前
不用无头浏览器,Java 如何将 HTML 转成图片?
java·后端
Chengbei112 小时前
红队专属Bing Dork自动化工具,敏感信息侦察效率拉满、自动生成可视化信息泄露审计报告
java·人工智能·安全·web安全·网络安全·自动化·系统安全
敖正炀2 小时前
集合-Set深入解析
java
下次再写2 小时前
Java互联网大厂面试技术问答实战:涵盖Java SE、Spring Boot、微服务及多场景应用
java·数据库·缓存·面试·springboot·microservices·技术问答
公众号-老炮说Java2 小时前
IDEA 2026.1 + Claude Code = 降维打击
java·ide·intellij-idea
千寻girling2 小时前
RabbitMQ 详细教程(38K字数)
java·后端·面试
止语Lab2 小时前
Go vs Java GC:同一场延迟战争的两条路
java·开发语言·golang
卷毛的技术笔记2 小时前
从“拆东墙补西墙”到“最终一致”:分布式事务在Spring Boot/Cloud中的破局之道
java·spring boot·分布式·后端·spring cloud·面试·rocketmq