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

相关推荐
浮尘笔记2 小时前
Java Snowy框架CI/CD云效自动化部署流程
java·运维·服务器·阿里云·ci/cd·自动化
一直不明飞行9 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
REDcker9 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
你的保护色9 小时前
【无标题】
java·服务器·网络
basketball6169 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
淘矿人10 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
小江的记录本10 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
来恩100310 小时前
请求转发与响应重定向的使用
java
@杰克成10 小时前
Java学习30
java·开发语言·学习
次元工程师!10 小时前
LangFlow开发(三)—Bundles组件架构设计(3W+字详细讲解)
java·前端·python·低代码·langflow