使用dubbo+zookeeper實現簡單的遠端呼叫
阿新 • • 發佈:2018-11-14
想用dubbo+zookeeper實現遠端呼叫的第一步是安裝zookeeper: zookeeper的安裝步驟
安裝完成之後啟動zookeeper,然後安裝dubbo-admin (用於更好的監控服務與管理):dubbo-admin的安裝步驟
都OK了之後來開始搭建我們的專案,首先建立一個專案,我取名為dubbo
然後在pom檔案裡匯入我們需要的依賴~
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.1.4.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <!-- spring end --> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.5</version> </dependency> </dependencies>
記得新增zookeeper和dubbo的依賴!
依賴都新增好了以後在dubbo專案下建立兩個子模組(Module)
provider:提供者
consumer:消費者
我們首先在provider(消費者)模組中新增一個介面一個實現類一個啟動類
DubboAp(介面)i:
package com.sixmac.dubbo;
public interface DubboApi {
public String say(String str);
}
DubboImpl(實現類):
package com.sixmac.dubbo; public class DubboImpl implements DubboApi{ @Override public String say(String str) { System.out.println("Hello: "+str); return "Hello: "+str; } }
AppP(提供者啟動類):
package com.sixmac.dubbo; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; public class AppP { public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "*.xml" }); context.start(); DubboApi bean = context.getBean(DubboApi.class); bean.say("MaNongXF"); System.out.println("服務啟動成功!"); System.in.read(); } }
然後就是配置檔案applicationProviderxml
<?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:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 提供方應用資訊,用於計算依賴關係,這個和client沒必要一致 -->
<dubbo:application name="provider-service"/>
<!-- 使用zookeeper廣播註冊中心暴露服務地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.10.93:2181"/><!--== <dubbo:registry address="zookeeper://192.168.0.101:2181" /> -->
<!--本地偽叢集配置 -->
<!-- <dubbo:registry protocol="zookeeper" address="192.168.10.93:2181,192.168.10.94:2182,192.168.10.95:2183" /> -->
<!-- 用dubbo協議在20880埠暴露服務 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 宣告需要暴露的服務介面(也可以使用dubbo的service註解的interFaceClass暴露介面) -->
<dubbo:service interface="com.sixmac.dubbo.DubboApi" ref="demoService"/>
<!-- 和本地bean一樣實現服務 -->
<bean id="demoService" class="com.sixmac.dubbo.DubboImpl"/>
</beans>
然後啟動,列印“服務啟動成功”
然後在dubbo-admin 檢視
這就表示服務提供者註冊成功,接下來可以在消費者中呼叫!
服務消費者只需要一個啟動類來遠端呼叫提供者的say方法~
AppC(消費者啟動類):
package com.sixmac.app;
import com.sixmac.dubbo.DubboApi;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class AppC {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationConsumer.xml" });
context.start();
DubboApi api = context.getBean(DubboApi.class);
String str=api.say("MaNongXF");
System.err.println("res: "+str);
System.out.println("遠端呼叫成功!");
System.in.read();
}
}
然後是配置檔案applicationConsumer
<?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:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
">
<!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方一樣 -->
<dubbo:application name="consumer-service" />
<!-- 使用zookeeper廣播註冊中心暴露發現服務地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.10.93:2181" />
<!-- 和上面的一樣 -->
<!-- <dubbo:registry address="zookeeper://192.168.10.93:2181" /> -->
<!--本地偽叢集配置 -->
<!-- <dubbo:registry protocol="zookeeper" address="192.168.10.93:2181,192.168.10.94:2182,192.168.10.95:2183" /> -->
<!-- 生成遠端服務代理,可以和本地bean一樣使用demoService -->
<dubbo:reference id="demoService" interface="com.sixmac.dubbo.DubboApi" />
</beans>
然後啟動AppC
可以看到已經成功呼叫了提供者的方法,然後再看看dubbo-admin
到這裡就OK啦~
原始碼在此:點選下載原始碼