<!--導入依賴 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