一、构建项目
-
创建空项目
-
创建两个module:provider-server和consumer-server
-
分别引入如下依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <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.4.14</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
-
在provider-server的service文件夹下创建买票服务接口TicketService及TicketServiceImpl,在propeties中配置端口和注册中心
package com.jx.service; public interface TicketService { public String getTicket(); }
package com.jx.service; import org.apache.dubbo.config.annotation.Service;//是dubbo下的类而不是springframework import org.springframework.stereotype.Component; //服务注册与发现 @Service//用于注册到注册中心,表明是提供者 @Component public class TicketServiceImpl implements TicketService{ @Override public String getTicket() { return "调用卖票服务,买到一张票"; } }
server.port=8001 #当前应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packages=com.jx.service
-
在consumer-server的service文件夹下创建UserService和与provider-server一样的买票接口买票服务接口TicketService,在propeties中配置端口和注册中心
package com.jx.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service public class UserService { @Reference//引用注解,调用注册中心的ticketService远程服务,表明此服务为消费者 TicketService ticketService; public void buyTicket(){ String ticket = ticketService.getTicket(); System.out.println(ticket); } }
package com.jx.service; public interface TicketService { public String getTicket(); }
server.port=8002 #当前应用名字 dubbo.application.name=consumer-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
-
在consumer-server测试类中创建一个测试方法
package com.jx; import com.jx.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();//实际通过注册中心调用provider-server的buyTicket() } }
二、下载和运行Zookeeper
- 下载 zookeeper压缩包腾讯微云下载地址
- 在zookeeper-3.4.10\conf 同目录下复制粘贴zoo_sample.cfg 并修改为zoo.cfg
- 以管理员权限运行bin\zkServer.cmd
三、下载和运行dubbo-admin
- 下载dubbo-admin.jar腾讯微云下载地址
- 在文件资源管理器的下载路径cmd 打开命令行
- 输入 java -jar dubbo-admin.jar 运行项目
- 浏览器访问localhost:7001进行登录 用户名及密码均为root
四、运行测试
- 分别运行provider-server和consumer-server
- 刷新dubbo管理页面,查看提供者及消费者是否已注册
- 运行测试方法,查看买票语句是否被输出