国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SOFARPC 集成 Zookeeper 注冊(cè)中心

SOFARPC 是近期螞蟻金服開源的一個(gè)高可擴(kuò)展性、高性能、生產(chǎn)級(jí)的 Java RPC 框架。在螞蟻金服 SOFARPC 已經(jīng)經(jīng)歷了十多年及五代版本的發(fā)展。SOFARPC 致力于簡(jiǎn)化應(yīng)用之間的 RPC 調(diào)用,為應(yīng)用提供方便透明、穩(wěn)定高效的點(diǎn)對(duì)點(diǎn)遠(yuǎn)程服務(wù)調(diào)用方案。為了用戶和開發(fā)者方便的進(jìn)行功能擴(kuò)展,SOFARPC 提供了豐富的模型抽象和可擴(kuò)展接口,包括過(guò)濾器、路由、負(fù)載均衡等等。

SOFA RPC 可以集成多種注冊(cè)中心實(shí)現(xiàn),其中一種就是常用的 ZooKeeper。

ZooKeeper 作為一個(gè)開源的分布式應(yīng)用協(xié)調(diào)系統(tǒng),已經(jīng)用到了許多分布式項(xiàng)目中,用來(lái)完成統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等工作。

本文將介紹 SOFARPC 是使用 ZooKeeper 作為注冊(cè)中心的用法。

1. ZooKeeper 注冊(cè)中心安裝

這里介紹下 Zookeeper 單機(jī)模式兩種安裝方式,集群模式請(qǐng)參考下其他文檔。

1.1 基于壓縮包安裝

第一步:去官網(wǎng)下載 http://zookeeper.apache.org/releases.html#download
例如目前最新版是 v3.4.11,我們下載壓縮包zookeeper-3.4.11.tar.gz,然后解壓到文件夾下,例如 /home/admin/zookeeper-3.4.11。

第二步:設(shè)置配置文件,可以直接從樣例復(fù)制一份。

$ cd /home/admin/zookeeper-3.4.11$ cp conf/zoo_sample.cfg conf/zoo.cfg

第三步:到 Zookeeper 安裝目錄下直接啟動(dòng)Zookeeper。

$ cd /home/admin/zookeeper-3.4.11$ sh bin/zkServer.sh startZooKeeper JMX enabled by defaultUsing config: /Users/zhanggeng/dev/zookeeper/bin/../conf/zoo.cfg-n Starting zookeeper ...STARTED

第四步:我們使用四字命令檢查下。

$ echo stat | nc 127.0.0.1 2181Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT...

第五步:如果需要查看數(shù)據(jù),直接運(yùn)行 zkCli.sh,連接后執(zhí)行 ls /即可。

$ sh bin/zkCli.shConnecting to localhost:2181......WatchedEvent state:SyncConnected type:None path:null[zk: localhost:2181(CONNECTED) 0] ls /[zookeeper]

1.2 基于 Docker 安裝

如果您已安裝了 Docker,那么可以選擇使用鏡像啟動(dòng) Zookeeper。

$ docker image pull zookeeper:3.4.11$ docker run -i -t --name my_zookeeper -p2181:2181 -d zookeeper:3.4.11

我們查看下啟動(dòng)日志:

$ docker logs -f my_zookeeperZooKeeper JMX enabled by defaultUsing config: /conf/zoo.cfg2018-04-16 07:38:59,373 [myid:] - INFO  [main:QuorumPeerConfig@136] - Reading configuration from: /conf/zoo.cfg......2018-04-16 07:23:41,187 [myid:] - INFO  [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181

可以看到端口已經(jīng)啟動(dòng)并發(fā)布,我們使用四字命令檢查下。

$ echo stat | nc 127.0.0.1 2181Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT...

我們可以查看啟動(dòng)的容器運(yùn)行狀態(tài)、關(guān)閉、重啟,參考命令如下:

$ docker container lsCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES30b13a744254        zookeeper:3.4.11    '/docker-entrypoin...'   23 hours ago        Up 42 seconds       2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   my_zookeeper## 關(guān)閉重啟的話$ docker container stop 30b13a744254$ docker container start 30b13a744254

如果需要使用 ZooKeeper 客戶端查看查看數(shù)據(jù),參考命令如下:

$ docker exec -it 30b13a744254 zkCli.shConnecting to localhost:2181......WatchedEvent state:SyncConnected type:None path:null[zk: localhost:2181(CONNECTED) 0] ls /[zookeeper]

2. SOFARPC 集成 Zookeeper 注冊(cè)中心

Demo 工程參見: sofa-rpc-zookeeper-demo

2.1 新建工程

運(yùn)行需要 JDK 6 及以上、 Maven 3.2.5 以上。

首先我們?cè)?IDE 里新建一個(gè)普通 Maven 工程,然后在 pom.xml 中引入如下 RPC 和 Zookeeper 相關(guān)依賴:

<dependencies>    <dependency>        <groupId>com.alipay.sofa</groupId>        <artifactId>sofa-rpc-all</artifactId>        <version>5.3.1</version>    <dependency>    <dependency>        <groupId>org.apache.curator</groupId>        <artifactId>curator-recipes</artifactId>        <version>2.9.1</version>    </dependency></dependencies>

2.2 編寫服務(wù)提供端

第一步:創(chuàng)建接口

package org.howtimeflies.sofa.rpc;public interface HelloService { public String sayHello(String name);}

第二步:創(chuàng)建接口實(shí)現(xiàn)

package org.howtimeflies.sofa.rpc;public class HelloServiceImpl implements HelloService {    public String sayHello(String name) {        return 'hello '   name;    }}

第三步:編寫服務(wù)端代碼

package org.howtimeflies.sofa.rpc;import com.alipay.sofa.rpc.config.ProviderConfig;import com.alipay.sofa.rpc.config.RegistryConfig;import com.alipay.sofa.rpc.config.ServerConfig;public class ServerMain { public static void main(String[] args) { // 指定注冊(cè)中心 RegistryConfig registryConfig = new RegistryConfig() .setProtocol('zookeeper') .setAddress('127.0.0.1:2181'); // 指定服務(wù)端協(xié)議和地址 ServerConfig serverConfig = new ServerConfig() .setProtocol('bolt') .setPort(12345) .setDaemon(false); // 發(fā)布一個(gè)服務(wù) ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>() .setInterfaceId(HelloService.class.getName()) .setRef(new HelloServiceImpl()) .setRegistry(registryConfig) .setServer(serverConfig); providerConfig.export(); }}

2.3 編寫服務(wù)調(diào)用端

我們拿到了服務(wù)端的接口,就可以編寫服務(wù)端調(diào)用端代碼

package org.howtimeflies.sofa.rpc;import com.alipay.sofa.rpc.config.ConsumerConfig;import com.alipay.sofa.rpc.config.RegistryConfig;public class ClientMain {    public static void main(String[] args) {        // 指定注冊(cè)中心        RegistryConfig registryConfig = new RegistryConfig()                .setProtocol('zookeeper')                .setAddress('127.0.0.1:2181');        // 引用一個(gè)服務(wù)        ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>()                .setInterfaceId(HelloService.class.getName())                .setProtocol('bolt')                .setRegistry(registryConfig);        // 拿到代理類        HelloService service = consumerConfig.refer();                // 發(fā)起調(diào)用        while (true) {            System.out.println(service.sayHello('world'));            try {                Thread.sleep(1000);            } catch (InterruptedException e) {            }        }    }}

2.4 運(yùn)行

我們先運(yùn)行服務(wù)提供端程序 ServerMain,然后去 ZooKeeper上看下服務(wù)訂閱情況。

$ sh bin/zkCli.shConnecting to localhost:2181......WatchedEvent state:SyncConnected type:None path:null[zk: localhost:2181(CONNECTED) 4] ls /sofa-rpc/org.howtimeflies.sofa.rpc.HelloService/providers[bolt%3A%2F%2F10.15.232.61%3A12345%3FuniqueId%3D%26version%3D1.0%26timeout%3D0%26delay%3D-1%26id%3Drpc-cfg-0%26dynamic%3Dtrue%26weight%3D100%26accepts%3D100000%26startTime%3D1523967648457%26pid%3D17664%26language%3Djava%26rpcVer%3D50301]

然后在運(yùn)行服務(wù)端調(diào)用端 ClientMain,

運(yùn)行結(jié)果如下:

hello worldhello worldhello worldhello world

我們也可以去 ZooKeeper上看下服務(wù)訂閱情況,

sh bin/zkCli.shConnecting to localhost:2181......WatchedEvent state:SyncConnected type:None path:null[zk: localhost:2181(CONNECTED) 5] ls /sofa-rpc/org.howtimeflies.sofa.rpc.HelloService/consumers[bolt%3A%2F%2F10.15.232.61%2Forg.howtimeflies.sofa.rpc.HelloService%3FuniqueId%3D%26version%3D1.0%26pid%3D17921%26timeout%3D3000%26id%3Drpc-cfg-0%26generic%3Dfalse%26serialization%3Dhessian2%26startTime%3D1523968102764%26pid%3D17921%26language%3Djava%26rpcVer%3D50301]

至此,使用 ZooKeeper 作為 SOFARPC 的注冊(cè)中心介紹完了。

3. 在 SOFABoot 使用 SOFARPC 及 ZooKeeper 注冊(cè)中心

SOFABoot 是螞蟻金服開源的基于 Spring Boot 的研發(fā)框架,它在增強(qiáng)了 Spring Boot 的同時(shí),SOFABoot 提供了讓用戶可以在 Spring Boot 中非常方便地使用 SOFAStack 相關(guān)中間件的能力。

SOFARPC 也實(shí)現(xiàn)以一個(gè) rpc-sofa-boot-starter 可以方便的集成到 SOFABoot 應(yīng)用。目前只支持Spring XML 方式發(fā)布和引用服務(wù),下一個(gè)版本將支持 Annotation 方式發(fā)布和引用服務(wù)。

Demo 工程參見: sofa-rpc-sofa-boot-zookeeper-demo

3.1 創(chuàng)建 SpringBoot 工程

SOFABoot 運(yùn)行需要 JDK 7 及以上、 Maven 3.2.5 以上。

我們可以使用 Spring Boot 的工程生成工具 來(lái)生成一個(gè)標(biāo)準(zhǔn)的Spring Boot 工程。

undefined

3.2 引入 SOFABoot 和 rpc-sofa-boot-starter

我們將工程導(dǎo)入到 IDE 中,然后在 pom.xml 將 Spring Boot 工程轉(zhuǎn)為一個(gè) SOFABoot 工程,很簡(jiǎn)單,只要加入依賴管控即可。

<dependencyManagement>    <dependencies>        <dependency>            <groupId>com.alipay.sofa</groupId>            <artifactId>sofaboot-dependencies</artifactId>            <version>2.3.1</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>

然后再在 pom.xml 中引入 rpc-sofa-boot-starter 的依賴:

<dependencies> <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>rpc-sofa-boot-starter</artifactId> <version>5.3.1</version> </dependency></dependencies>

3.3 編寫服務(wù)提供端

第一步:創(chuàng)建接口

package org.howtimeflies.sofa.rpc;public interface HelloService {    public String sayHello(String name);}

第二步:創(chuàng)建接口實(shí)現(xiàn)

package org.howtimeflies.sofa.rpc;public class HelloServiceImpl implements HelloService { public String sayHello(String name) { return 'hello ' name; }}

第三步:發(fā)布服務(wù)

我們通過(guò) SpringBean 的方式發(fā)布服務(wù),新建一個(gè) Spring 的 xml,例如 src/main/resource/rpc-server.xml,注意文件頭要保持一致。

<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans'       xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'       xmlns:sofa='http://sofastack.io/schema/sofaboot'       xsi:schemaLocation='http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans.xsd            http://sofastack.io/schema/sofaboot            http://sofastack.io/schema/sofaboot.xsd'       default-autowire='byName'>    <bean id='helloServiceImpl' class='org.howtimeflies.sofa.rpc.HelloServiceImpl'/>    <sofa:service interface='org.howtimeflies.sofa.rpc.HelloService' ref='helloServiceImpl'>        <sofa:binding.bolt/>    </sofa:service></beans>

3.4 編寫服務(wù)調(diào)用端

同樣服務(wù)端調(diào)用端也通過(guò) SpringBean 的方式引用一個(gè)服務(wù)。新建一個(gè) Spring 的 xml,例如 src/main/resource/rpc-client.xml,注意文件頭要保持一致。

<?xml version='1.0' encoding='UTF-8'?><beans xmlns='http://www.springframework.org/schema/beans' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:sofa='http://sofastack.io/schema/sofaboot' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://sofastack.io/schema/sofaboot http://sofastack.io/schema/sofaboot.xsd' default-autowire='byName'> <sofa:reference id='helloServiceRef' interface='org.howtimeflies.sofa.rpc.HelloService'> <sofa:binding.bolt/> </sofa:reference></beans>

3.5 指定注冊(cè)中心地址

我們需要在 src/main/resource/application.properties 里指定我們的應(yīng)用名和注冊(cè)中心地址

# 指定應(yīng)用名spring.application.name=test# 指定日志路徑logging.path=./logs# 注冊(cè)中心地址com.alipay.sofa.rpc.registry.address=zookeeper://127.0.0.1:2181

3.6 運(yùn)行

我們?cè)谏纱a里找到了默認(rèn)的啟動(dòng)類 XXXApplication.java,名字自動(dòng)生成的,例如本例是為:org.howtimeflies.sofa.rpc.SofaRpcSofaBootZookeeperDemoApplication

它的原始內(nèi)容如下:

package org.howtimeflies.sofa.rpc;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SofaRpcSofaBootZookeeperDemoApplication { public static void main(String[] args) { SpringApplication.run(SofaRpcSofaBootZookeeperDemoApplication.class, args); }}

可以看到里面并未指定加載的文件,我們將啟動(dòng)類改造下,引入 Spring XML 的配置,以及我們的調(diào)用代碼,如下:

package org.howtimeflies.sofa.rpc;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.ImportResource;@SpringBootApplication@ImportResource({'rpc-server.xml','rpc-client.xml'}) // 引入加載的 Spring XMLpublic class SofaRpcSofaBootZookeeperDemoApplication {    public static void main(String[] args) {        ApplicationContext context =                 SpringApplication.run(SofaRpcSofaBootZookeeperDemoApplication.class, args);        // 等待ZooKeeper下發(fā)地址        try {            Thread.sleep(2000);        } catch (Exception e) {        }        // 拿到調(diào)用端 進(jìn)行 調(diào)用        HelloService helloService = (HelloService) context.getBean('helloServiceRef');        String hi = helloService.sayHello('world');        System.out.println(hi);    }}

直接運(yùn)行 SofaRpcSofaBootZookeeperDemoApplication,結(jié)果如下:

. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.2.RELEASE)......2018-04-17 21:42:13.249 INFO 20211 --- [ main] .SofaRpcSofaBootZookeeperDemoApplication : Started SofaRpcSofaBootZookeeperDemoApplication in 5.958 seconds (JVM running for 6.75)hello world


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
2019 你必須關(guān)注的企業(yè)級(jí)開源項(xiàng)目
【剖析 | SOFARPC 框架】系列之 SOFARPC 優(yōu)雅關(guān)閉剖析
來(lái)吧!手寫一個(gè) RPC 框架。畢設(shè)/項(xiàng)目經(jīng)驗(yàn)穩(wěn)了!
手寫類似dubbo的rpc框架第三章《rpc框架》
簡(jiǎn)單之美 | Dubbo實(shí)現(xiàn)RPC調(diào)用使用入門
hbase問(wèn)題總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服