<!--导入依赖 dubbo + zookeeper--> <!--dubbo--> <!-- 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.8</version> </dependency> <!--引入zookeeper--> <!--zookeeper client--> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <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.6.2</version> <!--因为日志会冲突, 排出这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
配置注册中心的地址, 以及服务发现名, 和要扫描的包java
server.port=8001 # 服务应用名字 dubbo.application.name=provider-server # 注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 # 哪些服务要被注册 dubbo.scan.base-packages=com.wang.service
接口git
package com.wang.service; public interface TicketService { String getTicket(); }
实现类github
package com.wang.service; import com.alibaba.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; //zookeeper: 服务注册与发现 //使用了dubbo后, 尽可能不要使用Service注解(SpringBoot的Service) //这里的Service注解是dubbo的, 不要导错包! @Service //能够被扫描到, 在项目启动就自动注册到注册中心 @Component public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "获得一张票!"; } }
与上面相同spring
配置注册中心的地址, 配置本身的服务名apache
server.port=8002 # 消费者去哪里拿服务, 要暴露本身的名字 dubbo.application.name=consumer-server # 注册中心的地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
package com.wang.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; //放到容器中, 这里要用SpringBoot的 @Service public class UserService { //想拿到provider-server提供的票, 要去注册中心拿到服务 //引用, Pom坐标, 也能够定义与要使用的接口路径相同的接口名 @Reference TicketService TICKET_SERVICE; public void buyTicket() { String ticket = TICKET_SERVICE.getTicket(); System.out.println("在注册中心拿到=>" + ticket); } }
要先开启ZooKeeper和Dubbo Adminspringboot
提供者的@Service注解是Dubbo包中的, 不要导错app
提供者使用@Component将类被SpringBoot托管, 不要用@Service分布式
消费者要注册到SpringBoot中, 使用SpringBoot的@Serviceide
用dubbo的@Reference引用远程调用的接口, 注意, 要在和远程接口路径相同的路径下定义接口spring-boot