1,Dubbo 简介
1. Dubbo 是什么?
dubbo 就是个服务框架, 如果没有分布式的需求, 其实是不需要用的, 只有在分布式的时候, 才有 dubbo 这样的分布式服务框架的需求, 并且本质上是个服务调用的东西, 说白了就是个远程服务调用的分布式框架 (告别 web Service 模式中的 WSdl, 以服务者与消费者的方式在 dubbo 上注册)
2. Dubbo 能做什么?
1. 透明化的远程方法调用, 就像调用本地方法一样调用远程方法, 只需简单配置, 没有任何 API 侵入.
2. 软负载均衡及容错机制, 可在内网替代 F5 等硬件负载均衡器, 降低成本, 减少单点.
3. 服务自动注册与发现, 不再需要写死服务提供方地址, 注册中心基于接口名查询服务提供者的 IP 地址, 并且能够平滑添加或删除服务提供者.
调用关系说明:
服务容器负责启动, 加载, 运行服务提供者.
服务提供者在启动时, 向注册中心注册自己提供的服务.
服务消费者在启动时, 向注册中心订阅自己所需的服务.
注册中心返回服务提供者地址列表给消费者, 如果有变更, 注册中心将基于长连接推送变更数据给消费者.
服务消费者, 从提供者地址列表中, 基于软负载均衡算法, 选一台提供者进行调用, 如果调用失败, 再选另一台调用.
服务消费者和提供者, 在内存中累计调用次数和调用时间, 定时每分钟发送一次统计数据到监控中心.
安装 Zookeeper
- docker pull registry.docker-cn.com/library/zookeeper
- # 运行 zookeeper
- docker run --name zk01 --restart always -d -p 2111:2181 bf5cbc9d5cac
使用 zookeeper, 借助 docker 官方文档 https://hub.docker.com/_/zookeeper/
Dubbo,Zookeeper 整合
1. 引入 dubbo 和 zkclient 的相关依赖
- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>0.1.0</version>
- </dependency>
- <dependency>
- <groupId>com.GitHub.sgroschupf</groupId>
- <artifactId>zkclient</artifactId>
- <version>0.1</version>
- </dependency>
2. 配置 service 服务, 新建 service.TicketService 和 service.TicketServiceImp
- public interface TicketService {
- public String getTicket();
- }
- import com.alibaba.dubbo.config.annotation.Service;
- @Component
- // 是 dubbo 包下的 service
- @Service
- public class TicketServiceImp implements TicketService {
- @Override
- public String getTicket() {
- return "《Java 编程思想》";
- }
- }
3. 配置文件 application.YAML
- dubbo:
- application:
- name: provider-ticket
- registry:
- address: zookeeper://192.168.1.125:2111
- scan:
- base-packages: com.wdjr.ticket.service
- server:
- port: 9001
4. 启动服务提供者.
5. 启动消费者, 引入 Dubbo 和 Zookeeper 的依赖
- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>0.1.0</version>
- </dependency>
- <dependency>
- <groupId>com.GitHub.sgroschupf</groupId>
- <artifactId>zkclient</artifactId>
- <version>0.1</version>
- </dependency>
6. 新建一个 service.userService, 并将 TicketService 的接口调用过来 [全类名相同 - 包相同]
@Reference: 远程引用
@Service:spring 的注解
- @Service
- public class UserService {
- @Reference
- TicketService ticketService;
- public void hello(){
- String ticket = ticketService.getTicket();
- System.out.println("您已经成功买票:"+ticket);
- }
- }
7. 配置文件 application.YAML
- dubbo:
- application:
- name: comsumer-user
- registry:
- address: zookeeper://192.168.179.131:2111
8. 编写测试类测试
- @Autowired
- UserService userService;
- @Test
- public void contextLoads() {
- userService.hello();
- }
来源: https://www.cnblogs.com/JiangLai/p/10021548.html