文章目录
介绍
Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。 -来自官方的介绍。
注册中心zookeeper
拉取镜像
docker pull zookeeper:3.5.9
查看是否下载成功
docker images
容器中启动镜像
docker run --name zookeeper -p 2181:2181 --restart always -d zookeeper:3.5.9
查看镜像是否运行成功
docker ps
项目搭建
新建一个服务提供者和一个消费者 。目录结构如下:
服务提供者
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>3.0.7</version>
<type>pom</type>
</dependency>
<!-- dubbo依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.2.1</version>
</dependency>
</dependencies>
配置文件
server:
port: 8020
#应用的名字
spring:
application:
name: OrderProviderApplication
dubbo:
application:
name: order-provider
protocol:
name: dubbo
port: -1
registry:
id: zk-registry
address: zookeeper://zookeeperip:2181?blockUntilConnectedWait=100000&timeout=100000 #需要加后边的串,不然容易报连接失败
config-center:
address: zookeeper://zookeeperip:2181
metadata-report:
address: zookeeper://zookeeperip:2181
定义接口服务类
/**
* 定义服务的接口
*/
public interface IOrderService {
/**
* 保存订单信息
* @return
*/
String getOrderInfo();
}
接口服务具体实现类
使用注解@DubboService 暴露服务,注解可以指定版本,组,超时等
version,group,timeout
/**
* 提供方实现接口并暴露服务
*/
@DubboService
public class IOrderServiceImpl implements IOrderService {
/**
* 发送订单信息
* @return
*/
@Override
public String getOrderInfo() {
Order order = new Order();
order.setOrderId(1);
order.setOrderNo(1);
order.setProductId(1);
order.setUserId(1);
order.setOrderNum(5);
order.setOrderAmt(new BigDecimal("100.0"));
order.setOrderStatus("下单");
order.setPayStatus("未支付");
order.setCreateUser("elite");
order.setCreateTime(LocalDateTime.now());
return order.toString();
}
}
启动类
@SpringBootApplication
@EnableDubbo //开启dubbo服务
public class OrderProviderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderProviderApplication.class,args);
}
}
消费者
依赖
同服务提供者。
yml配置
server:
port: 8019
#spring应用名字
spring:
application:
name: OrderConsumerApplication
#dubbo配置
dubbo:
application:
name: order-consumer
protocol:
name: dubbo
port: -1
registry:
id: zk-registry
address: zookeeper://192.168.5.130:2181?blockUntilConnectedWait=100000&timeout=100000
config-center:
address: zookeeper://192.168.5.130:2181
metadata-report:
address: zookeeper://192.168.5.130:2181
定义接口与服务提供者一致
/**
* 接口类
*/
public interface IOrderService {
String getOrderInfo();
}
controller测试
@RestController
public class OrderController {
/**
* 引入接口直接调用
*/
@DubboReference
IOrderService orderService;
@GetMapping("/getOrderInfo")
public String getOrderInfo(){
return orderService.getOrderInfo();
}
}
测试结果
小结
service 与 reference
service 与 reference 是 Dubbo 最基础的两个配置项,它们用来将某个指定的接口或实现类注册为 Dubbo 服务,并通过配置项控制服务的行为。
service: 服务提供者暴露服务配置。对应的配置类:org.apache.dubbo.config.ServiceConfig用于服务提供者端,通过 service 配置的接口和实现类将被定义为标准的 Dubbo 服务,从而实现对外提供 RPC 请求服务。
reference:服务消费者引用服务配置。对应的配置类: org.apache.dubbo.config.ReferenceConfig 用于服务消费者端,通过 reference 配置的接口将被定义为标准的 Dubbo 服务,生成的 proxy 可发起对远端的 RPC 请求。