,1,创建3个Maven模块,一个dubbo-server作为服务方,一个dubbo-consumer作为消费方,一个common-service作为公共的接口jar包,dubbo-server和dubbo-consumer都引入common-service的依赖。注意启动顺序,首先启动ZK,然后启动dubbo-server,最后启动dubbo-consumer。
项目文件层级如图:
1,引入依赖,写springboot-test的pom.xml里面,
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.22.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- dubbo,如果引入了dubbo的Springboot Starter,就不用再引入这个包了,否则可能因为dubbo版本冲突导致启动失败 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.9</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper客户端依赖 -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
2,在common-service建立公共的接口,DemoService
public interface DemoService {
public void test();
}
3,dubbo-server服务方配置
@SpringBootApplication
@ImportResource("dubbo-server.xml")
public class ServerApplication implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(ServerApplication.class);
@Override
public void run(String... arg0) throws Exception {
System.out.println(">>>>>>>>>>>>>>>[ClientApplication start success]<<<<<<<<<<<<<");
log.info(">>>>>>>>>>>>>>>[ServerApplication start success]<<<<<<<<<<<<<");
}
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
dubbo配置文件dubbo-server.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name = "dubbo-server" />
<!--zookeeper注册中心 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.tiger.test.DemoService" ref="demoService"/>
<!-- 具体的实现bean -->
<bean id="demoService" class="com.tiger.service.DemoServiceImpl" />
</beans>
服务具体实现类:
import com.tiger.test.DemoService;
import org.springframework.stereotype.Service;
/**
* @description:
* @author: tiger
* @create: 2020-04-22
*/
@Service
public class DemoServiceImpl implements DemoService {
@Override
public void test() {
System.out.println("hello,我是服务方");
}
}
4,dubbo-consumer 消费方配置:
@SpringBootApplication
@ImportResource("dubbo-consumer.xml")
public class ComsumerApplication implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(ComsumerApplication.class);
@Override
public void run(String... arg0) throws Exception {
System.out.println(">>>>>>>>>>>>>>>[ClientApplication start success]<<<<<<<<<<<<<");
log.info(">>>>>>>>>>>>>>>[ComsumerApplication start success]<<<<<<<<<<<<<");
}
public static void main(String[] args) {
SpringApplication.run(ComsumerApplication.class, args);
}
}
dubbo配置文件dubbo-consumer.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubbo-client"/>
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
<dubbo:reference id="demoService" interface="com.tiger.test.DemoService"/>
</beans>
5,测试类:
@RestController
public class TestController {
@Autowired(required = false)
DemoService demoService;
@RequestMapping("/test")
public void test(){
demoService.test();
}
}
选择合适的dubbo的版本,否则启动各种各样的报错。