SpringBoot + Dubbo + zookeeper
1.创建一个空项目
服务提供者
2.创建一个provider-server模块,导入pom依赖
将服务提供者注册到注册中心,我们要整合dubbo+zookeeper所以需要导包
<!--导入依赖,Dubbo+zookeeper-->
<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及其依赖包,解决日志冲突,还需要剔除日志依赖;
<!--日志会冲突-->
<!--引入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>
编写一个卖票接口和一个实现类
public interface TicketService {
//卖票
public String getTicket();
}
注意@Service是dubbo型的,目的将项目发布到注册中心
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Service//将项目发布出去
@Component//放在容器中
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "《Java从入门到入狱》";
}
}
在springboot配置文件中配置dubbo相关属性
server.port=8081
#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.hejinjie.service
服务消费者
3.创建一个consumer-server模块,导入pom依赖同上
配置springboot 的dubbo参数
server.port=8082
# 声明当前应用的名字
dubbo.application.name=consumer-server
# 注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;
完善消费者服务类
@Service//放到容器中
public class UserService {
//想要拿到provider-server提供的票,要去注册中心去拿
@Reference//引用:pom坐标,可以定义路径相同的接口名
TicketService service;
public void getTickets(){
String ticket = service.getTicket();
System.out.println("在注册中心拿到了"+ticket);
}
}
测试类编写
@SpringBootTest
class ConsumerServerApplicationTests {
@Autowired
UserService service;
@Test
void contextLoads() {
service.getTickets();
}
}
启动测试