在分布式系统中, 国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot,Spring Cloud。

分布式系统:

一.Zookeeper和Dubbo概览

1.1 ZooKeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

1.2 Dubbo

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

Dubbo体系结构:

二.Zookeeper的安装与启动

在linux虚拟机上用docker安装zookeeper:

docker pull registry.docker-cn.com/library/zookeeper

docker启动zookeeper并进行端口映射:

docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper

.整合Dubbo

创建两个项目,一个项目作为服务提供者,一个项目作为服务消费者。

3.1 服务提供者注册到注册中心

3.1.1 引入dubbo和zkclient的相关依赖: <!--1.引入dubbo-spring-boot-starter-->

        <dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<!--2.引入zookeeper的客户端工具-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

3.1.2 配置dubbo的扫描包和注册中心地址:

dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://***.**.**.**:2181
dubbo.scan.base-packages=com.wang.ticket.service

3.1.3 开启dubbo的注解:

@EnableDubbo  //开启dubbo注解
@SpringBootApplication
public class ProviderTicketApplication { public static void main(String[] args) {
SpringApplication.run(ProviderTicketApplication.class, args);
}
}

3.1.4 使用@Service(com.alibaba.dubbo.config.annotation.Service)发布服务:

先编写Service接口:

package com.wang.ticket.service;
public interface TicketService {
String getTicket();
}

实现接口:

@Component
@Service //注意这边是com.alibaba.dubbo.config.annotation.Service
//主要作用是将服务发布出去
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《毒液:致命守护者》";
}
}

完成上诉步骤后启动该服务项目,保持运行状态,以便消费者使用。

3.2 服务消费者消费服务

3.2.1 在消费者项目的pom文件中引入dubbo和zkclient

 <!--1.引入dubbo-spring-boot-starter-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.0</version>
</dependency>
<!--2.引入zookeeper的客户端工具-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

3.2.2 创建服务发布的service接口,要求全类名与发布的完全相同

package com.wang.ticket.service;
public interface TicketService {
String getTicket();
}

3.2.3 配置注册中心地址

dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://172.16.80.34:2181

3.2.4 消费注册中心服务

@Service //org.springframework.stereotype.Service
public class UserService {
@Reference //引入注册中心的服务,按照全类名匹配,在注册中心找到对应的服务
TicketService ticketService;
public void hello(){
String ticket = ticketService.getTicket();
System.out.println(ticket);
}
}

3.2.5 测试

测试只需要注入UserService,并调用该方法,若能成功调用说明dubbo服务以及调用成功了

最新文章

  1. WPF DataGrid绑定到数据源的方法
  2. java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.lang.Integer
  3. HttpWebRequest header configuration
  4. objective-c系列-动态类型和动态绑定
  5. hdu3448 01背包+dfs
  6. 初级node+express建站
  7. httpsclient 自动获取证书 无证书访问 验证过能直接用
  8. C#.NET数据库访问类DBHelper
  9. linux驱动程序之电源管理之regulator机制流程 (1)
  10. 如何仿写thinkphp的C方法?
  11. iOS页面间传值的方式 (Delegate/NSNotification/Block/NSUserDefault/单例)
  12. PDO(20161107)
  13. Ubuntu 16.04源码编译安装nginx 1.10.0
  14. 踩坑学习python自动化测试第一天!
  15. django的视图函数
  16. QT中全局变量的定义
  17. 如何安装ipa文件(二)
  18. STM32F4xx -- Cortex M4
  19. 升级ndk后Android studio的build错误
  20. 雷林鹏分享:Ruby 命令行选项

热门文章

  1. ML基础——搜索引擎与图书管理,百度与李彦宏
  2. mysql主从之多线程复制
  3. 【一起学源码-微服务】Nexflix Eureka 源码十一:EurekaServer自我保护机制竟然有这么多Bug?
  4. 【题解】有标号的DAG计数4
  5. 洛谷$P1712\ [NOI2016]$区间 线段树
  6. 1094 谷歌的招聘 (20 分)C语言
  7. vue-cli3 中 sockjs-node/info?t=报错 的解决方法
  8. 从头学pytorch(十五):AlexNet
  9. 【转】python及其工具包安装基本流程
  10. Java读取数据库中的xml格式内容,解析后修改属性节点内容并写回数据库