IDE:IntelliJ IDEA
SpringBoot版本:2.0以上
docker拉取zookeeper镜像并运行,这里不做集群,所以只开放了2181端口与java连接
新建空项目:
在创建成功的空项目中新建两个SpringBoot Module:服务提供者Provider和服务消费者Consumer,为方便在创建SpringBoot项目时引入Spring Web模块,Provider创建过程如下,Consumer类似。
-
服务提供者Provider关键代码
引入pom依赖
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<!--curator和zkclient都是zookeeper的java客户端-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
使用注解的方式配置Dubbo,编写provider的application.properties配置文件
#注册名称与项目名相同
dubbo.application.name=provider
#注册中心的地址
dubbo.registry.address=zookeeper://192.168.157.12:2181
#该行的作用和@EnableDubbo一样
dubbo.scan.base-packages=com.ticket.service
编写service中的接口和实现类
TicketService.interface:
package com.ticket.service;
public interface TicketService {
String getTicket();
}
TicketServiceImpl.java(一定是引入dubbo包下的@Service注解):
package com.ticket.service.impl;
import com.ticket.service.TicketService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
//实例化到spring容器中
@Component
//服务提供者暴漏服务
@Service
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《黑猫警长》";
}
}
-
服务消费者Customer关键代码
pom依赖同服务提供者一样
provider的application.properties配置文件
dubbo.application.name=consumer
dubbo.registry.address=zookeeper://192.168.157.12:2181
消费者代码中的TickerService接口与提供者代码一样 ,接口的全类名要保持一致
消费者服务(也是dubbo包下的@Reference注解)
package com.user;
import com.ticket.service.TicketService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
//@Reference 用在消费端,表明使用的是服务端的什么服务
@Reference
TicketService ticketService;
public void hello(){
String ticket = ticketService.getTicket();
System.out.println("买到"+ticket);
}
}
测试类
@SpringBootTest
class DemoApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.hello();
}
}
参考:SpringBoot整合dubbo及zookeeper@Reference空指针异常、SpringBoot2.15整合dubbo和zookeeper