`
liujiekasini0312
  • 浏览: 147436 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring cloud 微服务框架 第六天

 
阅读更多

第六天,使用spring boot和thrift,zookeeper建立微服务,Spring cloud适应于云端服务,也适用于企业信息化SOA建设。spring boot也是restful微服务开发的利器。但对于内网服务,即服务与服务之间的调用,spring并没有去刻意封装,也许他们认为已经没有必要了,因为已经有了thrift、ice等强大的框架。

如果是用spring boot本身提供的restful服务作为服务与服务之间的调用,效率低很多,thrift的效率大概是restful的100-1000倍左右。本篇既是基于spring boot框架,结合thrift和zookeeper实现的一个简单微服务框架,服务与服务之间使用thrift通信(thrift既是通信方式也是数据压缩方式)。

本demo一共包括三个工程:

cloud-thrift-server:服务提供方

cloud-thrift-interface:接口及传输对象定义

cloud-thrift-client:服务调用方

开源代码地址:http://git.oschina.net/zhou666/spring-cloud-7simple

1)建立thrift接口定义文档

namespace java cloud.simple.service

struct UserDto {

1: i32 id

2: string username

}

service UserService {

UserDto getUser()

}

接口定义完后,使用thrift命令生成对应的java文件,主要生成两个文件,分别是UserService.java和UserDto.java,把这两个文件放入cloud-thrift-interface工程,因为客户端也需要这个接口定义。

2)实现thrift服务注册

在服务的提供端需要实现接口,并且还要把实现类注册到thrift服务器。

UserService.Processor processor = new UserService.Processor(

new UserServiceImpl());

TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(

tServerTransport()).processor(processor));

UserServiceImpl就是接口实现类,将其注册金Tserver。

注册完服务后,需要启动Tserver,很显然这个需要在线程里启动。

executor.execute(new Runnable() {

@Override

public void run() {

tServer().serve();

}

});

3)使用zookeeper进行服务名称注册

上面是注册具体的服务执行类,这一步是将服务的实例注册进zookeeper,这样才能实现负载均衡。让客户端可以根据服务实例列表选择服务来执行。当然这里只需要注册服务所在服务器的IP即可,因为客户端只要知道IP,也就知道访问那个IP下的该服务。

String servicePath = "/"+serviceName ;// 根节点路径

ZkClient zkClient = new ZkClient(serverList);

boolean rootExists = zkClient.exists(servicePath);

if (!rootExists) {

zkClient.createPersistent(servicePath);

}

InetAddress addr = null;

try {

addr = InetAddress.getLocalHost();

} catch (UnknownHostException e) {

e.printStackTrace();

}

String ip = addr.getHostAddress().toString();

String serviceInstance = System.nanoTime() +"-"+ ip;

// 注册当前服务

zkClient.createEphemeral(servicePath + "/" + serviceInstance);

System.out.println("提供的服务为:" + servicePath + "/" + serviceInstance);

要注意这里使用zkClient.createEphemeral建立临时节点,如果这台服务器宕机,这个临时节点是会被清除的,这样客户端在访问时就不会再选择该服务器上的服务。

4)客户端更新服务列表

客户端需要能及时的监听服务列表的变化并作出负载均衡,我们用如下方式监听服务列表的变化:

// 注册事件监听

zkClient.subscribeChildChanges(servicePath, new IZkChildListener() {

// @Override

public void handleChildChange(String parentPath,

List<String> currentChilds) throws Exception {

// 实例(path)列表:当某个服务实例宕机,实例列表内会减去该实例

for (String instanceName : currentChilds) {

// 没有该服务,建立该服务

if (!serviceMap.containsKey(instanceName)) {

serviceMap.put(instanceName,createUserService(instanceName));

}

}

for (Map.Entry<String, UserService.Client> entry : serviceMap.entrySet()) {

// 该服务已被移除

if (!currentChilds.contains(entry.getKey())) {

serviceMap.remove(entry.getKey());

}

}

System.out.println(parentPath + "事件触发");

}

});

有了服务列表,客户端在调用服务的时候就可以采用负载均衡的方式了,在这里使用最简单的随机方式:

public UserService.Client getBalanceUserService(){

Map<String, UserService.Client> serviceMap =ZooKeeperConfig.serviceMap;

//以负载均衡的方式获取服务实例

for (Map.Entry<String, UserService.Client> entry : serviceMap.entrySet()) {

System.out.println("可供选择服务:"+entry.getKey());

}

int rand=new Random().nextInt(serviceMap.size());

String[] mkeys = serviceMap.keySet().toArray(new String[serviceMap.size()]);

return serviceMap.get(mkeys[rand]);

}

本文结束,具体参见代码,另外,之前还不了解thrift和zookeeper的朋友,不要被他们吓到,其实他们是很轻量级的技术,很容易上手,这也许就是他们流行的原因。


分享到:
评论

相关推荐

    spring cloud 微服务简单框架

    6. **Spring Cloud Hystrix**:Hystrix 是一个延迟和容错库,用于隔离访问远程服务、第三方库,防止级联失败,增加系统的弹性。在微服务架构中,当一个服务不可用时,Hystrix 可以提供降级策略,保证系统的稳定。 7...

    SpringCloud第3季2024.7z

    SpringCloud是微服务架构中的一个核心框架,它提供了一套完整的解决方案,用于构建分布式系统,如服务发现、负载均衡、断路器、API网关、数据流处理等。本资源"SpringCloud第3季2024.7z"很可能包含的是关于Spring...

    从天气项目看Spring Cloud微服务治理

    ### 从天气项目看Spring Cloud微服务治理 #### Spring Cloud简介 Spring Cloud 是一套基于 Spring Boot 实现的微服务云应用开发框架,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如...

    Java之 Spring Cloud 微服务搭建网关(第三个阶段)【一】.zip

    在本教程中,我们将深入探讨如何使用Spring Cloud构建微服务网关,这是Spring Cloud生态中的一个关键组件。Spring Cloud提供了一套工具集,用于简化分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、...

    《深入理解Spring Cloud与微服务构建》word版本

    Spring Cloud作为目前最流行的微服务框架之一,它提供了大量的工具和服务,帮助开发者快速搭建分布式系统。该书可能涵盖了以下几个核心知识点: 1. **Spring Cloud简介**:Spring Cloud是基于Spring Boot的云应用...

    SpringCloud微服务接口查询Demo

    在"SpringCloud微服务接口查询Demo"中,我们主要探讨的是如何利用SpringCloud来实现微服务之间的接口查询和交互,以便更好地理解和监控服务的运行状态。 1. **服务注册与发现**: SpringCloud的核心组件之一是...

    基于layui+springcloud的企业级微服务框架

    仿百度能力开放平台的spring cloud 微服务框架 ,历经多家公司生产考验 1.用户权限 基于spring security jwt 的无session后台管理框架 2.注册中心 基于eureka的服务注册中心 提供动态上线下线功能 3 配置中心 集成...

    《深入理解Spring Cloud与微服务构建》学习笔记(八)

    在《深入理解Spring Cloud与微服务构建》的学习笔记中,第八部分主要聚焦于如何使用Eureka来实现服务注册和发现。以下是一些核心知识点: 1. **Eureka Server**: 这是Eureka的核心组件,作为一个服务注册中心,它...

    基于SpringCloud微服务技术开发的“淘东”电商项目--taodong-shop.zip

    "基于SpringCloud微服务技术开发的“淘东”电商项目--taodong-shop"是一个全面展示微服务架构在电商领域应用的实际案例。SpringCloud作为Java生态中的微服务框架,为大型分布式应用程序提供了全面的服务发现、配置...

    springcloud视频学习

    3. 创建并部署第一个SpringCloud微服务:演示如何使用Spring Cloud Netflix Eureka创建服务注册中心,以及如何让其他微服务实例注册到这个中心。 4. 使用Spring Cloud Config实现配置管理:讲解如何通过Config ...

    7天学会spring cloud教程.pdf.zip

    《7天学会Spring Cloud教程》是一本专注于快速掌握微服务框架Spring Cloud的实践指南。Spring Cloud作为Java领域的主流微服务框架,为企业级分布式应用提供了全面的解决方案,包括服务发现、配置中心、负载均衡、...

    深入理解Spring Cloud与微服务构建 方志朋 高清pdf

    Spring Cloud 是一套基于 Spring Boot 实现的微服务云应用开发框架。它提供了构建分布式系统中服务治理、配置管理、消息总线、负载均衡、断路器、数据监控等工具。Spring Cloud 的目标是让开发者能够快速地搭建出...

    尚硅谷SpringCloud第二季笔记

    SpringCloud是基于Spring Boot实现的微服务框架,它提供了构建分布式系统所需的诸多服务发现、配置管理、断路器、智能路由、微代理、控制总线等工具,旨在简化微服务架构的开发和运维工作。 在云原生(Cloud Native...

    springCloud-master_单点登录_springCloud单点登录_SpringCloud系统_springclou

    SpringCloud是基于Spring Boot的微服务治理框架,它提供了包括服务发现、负载均衡、断路器、配置中心、熔断机制等一系列微服务解决方案。在"springCloud-master_单点登录_springCloud单点登录_SpringCloud系统_...

    基于微服务框架的个人博客系统《SpringCloud版》(SpringBoot+SpringCloud+MyBati.zip

    《基于微服务框架的个人博客系统》是一款利用Spring Boot、Spring Cloud和MyBatis技术栈构建的应用,旨在提供一个高效、可扩展的个人博客平台。本项目的核心目标是利用微服务架构来提升系统的可维护性和可扩展性,...

    微服务安全架构(Spring Boot _ Spring Cloud-JWT).pdf

    基于Spring Boot与Spring Cloud的微服务安全架构,主要关注点是使用JWT(JSON Web Token)作为微服务之间的认证和授权机制,这在当今云计算和分布式系统架构中是非常关键的部分。整个文档描述了在构建和维护微服务...

    悟空项目管理-基于Spring Cloud Alibaba微服务架构 +vue ElementUI的前后端分离项目管.zip

    1. **Spring Cloud Alibaba**: Spring Cloud Alibaba是阿里巴巴提供的一个微服务解决方案,它集成了多个微服务组件,如Nacos(服务发现与配置中心)、Dubbo(高性能RPC框架)、Sentinel(流量控制、熔断降级、系统...

    Spring和SpringCloud视频

    SpringCloud作为微服务解决方案的集大成者,为基于SpringBoot的应用提供了构建分布式系统所需的工具,如服务发现、配置管理、断路器、智能路由、微代理、控制总线等。它使得开发者能够轻松地在SpringBoot应用中实现...

    SpringCloud第二季脑图.rar

    SpringCloud是中国Java开发者广泛使用的微服务框架之一,它基于Spring Boot进行快速构建,并提供了众多用于构建分布式系统的组件。"SpringCloud第二季脑图.rar"很可能包含周阳老师关于SpringCloud的系统性学习路径和...

    基于SpringCloud, SpringCloud alibaba的微服务商城系统源码.zip

    《构建基于SpringCloud与SpringCloud Alibaba的微服务商城系统》 在现代互联网应用开发中,微服务架构已经成为主流,它将复杂的应用拆分为一组小的、独立的服务,每个服务都可以独立部署、扩展和升级,提高了系统的...

Global site tag (gtag.js) - Google Analytics