目录
一、准备工作
环境centos7 + idea +windows
1、首先在linux上部署并启动zookeeper。
教程:https://blog.csdn.net/zy_281870667/article/details/80646224
2、安装可视化工具dubbo-admin,其实是一个war包,部署到tomcat中的webapps下,启动tomcat即可。
用途:我们不能直观看到dubbo和zookeeper上到底有哪些服务和消费者,所以这里借助dubbo-admin可视化工具。
如何获取dubbo-admin:请参考 https://blog.csdn.net/qq_38157516/article/details/82421748
先展示下我的效果图:
二、创建springboot项目结构
为模拟微服务的调用,这里创建3个springboot的module:
结构分别为:
说明:
dubbo-zookeeper-consumer:与前端交互,属于服务消费者,需要在zookeeper中注册。
dubbo-zookeeper-provider:具体业务逻辑的实现,属于服务提供者,在zookeeper注册为dubbo服务。
dubbo-zookeeper-service:主要放置公用的接口、实体类,用maven打成jar包,供 consumer 和 provider 引用。
将 dubbo-zookeeper-service 打成jar包:
在 dubbo-zookeeper-consumer 和 dubbo-zookeeper-provider 的 pom.xml 引入上述jar的依赖:
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-zookeeper-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
除此之外,还需在dubbo-zookeeper-consumer 和 dubbo-zookeeper-provider 的 pom.xml 引入dubbo、zookeeper相关依赖:
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
接下来是代码:
dubbo-zookeeper-service 接口代码:
package com.example.service;
public interface DubboService {
String getData(String name);
}
dubbo-zookeeper-provider 代码:
package com.example.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.example.service.DubboService;
@Service // 注意,这里的service注解为dubbo下的
public class DubboServiceImpl implements DubboService {
@Override
public String getData(String name) {
return "hello:"+name;
}
}
dubbo-zookeeper-consumer 代码:
package com.example.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.example.service.DubboService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class Consumer {
//这里必须用 dubbo 的 @Reference 注解
@Reference
private DubboService dubboService;
@RequestMapping("/getInfo/{name}")
public Map getInfo(@PathVariable String name){
Map<String, Object> map = new HashMap<>();
String res = dubboService.getData(name);
map.put("success",res);
System.out.println("result:" + res + ",调用成功!!!!!!!!");
return map;
}
}
最后是配置文件application.properties
服务提供方provider:
server.port=8081
########## dubbo 生产者配置 begin ##########
# 服务名称
spring.dubbo.application.name=test-provider
# 注册中心
spring.dubbo.registry.address=zookeeper://192.168.1.102:2181
# dubbo 协议
spring.dubbo.protocol.name=dubbo
# 端口
srping.dubbo.protocol.port=12345
# 声明需要暴露的服务接口
spring.dubbo.scan=com.example
########## dubbo 生产者配置 end ##########
服务消费方consumer:
server.port=8082
########## dubbo 消费者配置 begin ##########
# 服务名称
spring.dubbo.application.name=test-consumer
# 注册中心
spring.dubbo.registry.address=zookeeper://192.168.1.102:2181
# 告诉注册中心我需要什么服务
spring.dubbo.scan=com.example
########## dubbo 消费者配置 end ##########