spring项目dubbo zookeeper的应用demo

2 篇文章 0 订阅
1 篇文章 0 订阅


源码下载

Dubbo

Dubbo学习

问题:如果通过nginx实现前台调用后台的业务逻辑,.那么如果后台的服务器需要做新增/删除时必须手动的修改nginx配置文件.

 Nginx主要的作用就是反向代理.

 

 

微服务的治理方案

说明:如果增加服务器或者减少服务器都是自动完成

 

 

 

业务逻辑说明:

  1. 当服务的提供者启动时,会将服务的名称:IP:端口会写入注册中心.
  2. 注册中心内部会维护服务列表
  3. 当消费者需要访问服务时,需要先访问注册中心获取服务列表信息.之后将服务列表保存到本地缓存中.方便后续的访问.在客户端内部有负载均衡的算法,筛选出一台服务器,之后进行访问.
  4. 如果后台服务器出现宕机现象.这时注册中心通过心跳检测的方式判断服务器是否宕机.如果服务器宕机则会将该服务器信息从服务列表中删除.之后将新的服务列表发送消费者(客户端)进行更新.

 

Zookeeper

Zookeeper介绍

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

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集, [1]  提供Java和C的接口。

ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。(概述图片来源: [2]  )

总结:Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址.

 

启动zk

 

SOA思想

SOA介绍

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

 

HttpClient调用方式:

 

HttpClient调用方式代码层级比较复杂,会有多余的代码.

 

SOA思想的体现

 

 

RPC协议规则

RPC介绍

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

有多种 RPC模式和执行。最初由 Sun 公司提出。IETF ONC 宪章重新修订了 Sun 版本,使得 ONC RPC 协议成为 IETF 标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。

总结:RPC调用的规则可以传输java对象.底层实现时将数据转化流,并且该流经过加密处理.并且rpc内部使用UTF-8编码格式

要求:传输的java对象必须序列化

 

 

Dubbo介绍

概念说明

Dubbo是 [1]  阿里巴巴公司开源的一个高性能优秀的服务框架(SOA),使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和 [2]  Spring框架无缝集成

Dubbo流程图

 

 

组件介绍:

提供者:将接口具体实现的.

   消费者:调用接口方法的

   注册中心:负责管理服务,负责协调调度.

 

Dubbo入门案例

导入测试类项目

 

 

 

测试demo

说明:导入项目后,将JDK修改即可

 

 

编辑提供者

编辑配置文件

<!--表示当前服务的名称  -->

<dubbo:application name="hello-world" />



<!--  使用multicast广播注册中心暴露服务地址 -->

<!-- <dubbo:registry address="multicast://224.5.6.7:1234"/>  -->

<dubbo:registry address="zookeeper://192.168.126.170:2181" />



<!-- 用dubbo协议在20880端口暴露服务 -->  

<dubbo:protocol name="dubbo" port="20880" />



<!-- 声明需要暴露的服务接口 -->

<dubbo:service interface="com.jt.dubbox.api.IProcessData" ref="demoService" />



<!-- 具体的实现bean -->

<bean id="demoService" class="com.jt.dubbox.service.impl.ProcessDataImpl" />

 

 

 

编辑提供者测试类

public class Main {

public static void main(String[] args) throws Exception {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

new String[] { "applicationProvider.xml" });



//注意不能用ApplicationContext接口

context.start();

System.out.println("service1 started!");

System.out.println("按任意键退出");

System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟  

}

}

 

编辑消费者

编辑消费者配置文件

<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->

<dubbo:application name="consumer-of-helloworld-app" />



<!-- 注册中心暴露服务地址 --> 

<!-- <dubbo:registry address="multicast://224.5.6.7:1234"/> -->

<dubbo:registry address="zookeeper://192.168.126.170:2181" />

<dubbo:consumer timeout="5000"/>



<!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->

<dubbo:reference id="demoService" interface="com.jt.dubbox.api.IProcessData" />

 

 

编辑消费者测试类

public class ConsumerThd {

public static void main(String[] args) {

sayHello();

}

public static void sayHello() {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

new String[] { "applicationConsumer.xml" });

context.start();



IProcessData demoService = (IProcessData) context.getBean("demoService");

for (;;) {

String s = demoService.hello("world");

System.out.println(s);

}



}

}

源码下载​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值