40.0、springboot-服务注册开发实战初体验【初体验】
【注意嗷~】:写这个项目前要先安装配置好zookeeper和dubbo。不太了解这个,或者不会安装的同学可以先去我的专栏《springboot学习总结》看看《39.0、zookeeper和dubbo的安装》很详细~
首先咱们创建两个springboot模块,分别为provider-service和consumer-service
分别代表:服务端 和 消费者
两个模块都在pom.xml中导入以下相关依赖:
<!--导入依赖:Dubbo + zookeeper-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--导入zkclient-->
<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-service模块中创建一个service文件夹,在这里面里写一个接口TicketService和,他的实现类 TicketServiceImpl
分别如下:
TicketService.java:
package com.hkl.service;
public interface TicketService {
public String getTicket();
}
TicketServiceImpl.java:
package com.hkl.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Service//可以被扫描到,在项目启动就自动注册到注册中心,注意这里的Service注释是dubbo包下的不是spring下的
@Component//使用了Dubbo后尽量不要使用Service注解
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "获得了一张票";
}
}
这里要【注意】导入的@Service注释是dubbo包下的,不是spring下的千万不要导错了,
所以为了区分,这里就直接用@Component注释来标注而不用@Service来
在provider-service模块application.properties文件里配置一下相关信息:
application.properties文件:
server.port=8001
#服务应用名字
dubbo.application.name=provider-service
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.hkl.service
配置端口,是因为待会儿要同时启动两个项目,所以要修改默认端口,改成两个不同的端口
在【consumer-service】模块中创建一个service文件夹下创建一个
UserService.java文件如下:
package com.hkl.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service//放到容器中
public class UserService {
//想拿到provicer-service提供的票,要去注册中心拿到服务
@Reference//两种方法:第一种引用,第二种Pom坐标,可以定义路径相同的接口名
TicketService ticketService;
public void buyTicket() {
String ticket = ticketService.getTicket();
System.out.println("在注册中心拿到=>"+ticket);
}
}
Application.properties配置文件:
server.port=8002
#消费者去哪里拿服务需要暴露自己的名字
dubbo.application.name=consumer-service
#注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
在comsumer-service模块的测试类中:
package com.hkl;
import com.hkl.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ConsumerServiceApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.buyTicket();
}
}
然后依次启动zookeeper服务器,dubbo的后台管理,provider-service项目,comsumer-service项目,最后启动comsumer-service的测试类
能看到后台输出了 在注册中心拿到=>获得了一张票 这段话,
这里主要体验一下,一个项目从另一个项目中调取函数使用
【注意嗷!!!】上面dubbo的配置是不完整的,只是为了初步体验一下服务调用,真正用到dubbo注册中心的时候,基本配置如下:
provider服务提供者 application.yaml 如下:
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者
name: online-retailer-provider #dubbo提供者的别名,只是个标识
# 注册中心地址
registry: #注册中心配置,用于配置连接注册中心相关信息
address: zookeeper://127.0.0.1:2181 #zk地址
protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定消费方被动接受
name: dubbo #dubbo协议
port: 20880 #duboo端口号
scan:
base-packages: com.hkl.service #服务暴露与发现消费者所在的package
comsumer消费者 application.yaml 如下:
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者
name: online-retailer-web
registry: #注册中心配置,用于配置连接注册中心相关信息。
address: zookeeper://127.0.0.1:2181 #zk地址
protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
name: dubbo #dubbo协议
port: 20880 #duboo端口号
scan:
base-packages: com.hkl.service #服务暴露与发现消费所在的package