使用dubbo作爲服務中間件通信

最近做的一個分佈式項目用到了dubbo,寫一下使用過程
需要在linux中安裝zookeeper-3.4.6.tar.gz來管理dubbo,將服務註冊到註冊中心

1、安裝zookeeper
將zookeeper用xftp傳到wmvare虛擬機的linux
2. tar -zxvf zookeeper-3.4.6.tar.gz 解壓zookeeper
3. cd zookeeper-3.4.6
4. mkdir data
5. cd conf
6. mv zoo_sample.cfg zoo.cfg (改個名字爲zoo.cfg)
7. vi zoo.cfg
8. 將dataDir的路徑改爲
dataDir=/root/zookeeper-3.4.6/data
9.保存退出wq
10.cd
11.cd bin
9. 啓動zookeeper 命令: ./zkServer.sh start
10. 查看啓動狀態: ./zkServer.sh status
11. 出現Mode:standlone 表示正常啓動了
12.看看ip地址:ifconfig
13.記住ip地址

在spring中配置dubbo服務

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
	<!-- 將該服務註冊到註冊中心(zookeeper) -->
	<!-- 服務提供者的名字 -->
	<dubbo:application name="jd-manager"/>
	<!-- 註冊到註冊中心 -->
	<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181"></dubbo:registry>
	<!-- 配置協議,用來暴漏服務(配置暴漏服務的端口號) -->
	<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
	<!-- 暴漏服務 -->
	<dubbo:service interface="org.java.service.ItemService" ref="itemServiceImpl"></dubbo:service>
	<dubbo:service interface="org.java.service.ItemCatService" ref="itemCatServiceImpl"></dubbo:service>
</beans>

在web的springmvc.xml中引用服務

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.2.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
	<!-- 掃描用@Controller註解的類,並且加載到spring中進行管理 -->
	<context:component-scan base-package="org.java.controller"></context:component-scan>
	<!-- 配置註解驅動 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	<!-- 視圖解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="1073741824"></property>
	</bean>
	
	<!-- 不攔截靜態資源 
	<mvc:resources location="/css/" mapping="/css/**"/>
	<mvc:resources location="/js/" mapping="/js/**"/>-->
	<mvc:default-servlet-handler/>
	<!-- 引用服務 -->
	<dubbo:application name="jd-manager-web"/>
	<!-- 去註冊中心拿服務 -->
	<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181"></dubbo:registry>
	<!-- 引用服務 -->
	<dubbo:reference interface="org.java.service.ItemService" id="itemService"></dubbo:reference>
	<dubbo:reference interface="org.java.service.ItemCatService" id="itemCatService"></dubbo:reference>
	<dubbo:reference interface="org.java.content.service.ContentCatService" id="contentCatService"></dubbo:reference>
	<dubbo:reference interface="org.java.content.service.ContentService" id="contentService"></dubbo:reference>
</beans>

這樣可以正常啓動服務器了。

常見錯誤:
1、連接超時 timeout
分析:可能是zookeeper沒有正常開啓,或者虛擬機網絡斷開連接
可使用命令./zkServer.sh status (在zookeeper在bin目錄中輸入命令)查看啓動狀態
2、no provider avalible 沒有服務特供者
這就很蛋疼了,也許是配置文件配錯了,端口號一定要對應上,通常都是ip地址寫錯了。默認端口20880
3、message can not send ,beacuse the channel is closed,信息無法送達,因爲通道被關閉。
可能是網絡端口了,或者是service沒有啓動,就直接啓動web導致通道關閉。正常啓動service即可。
如果service正常啓動,據說這個問題可能是vm虛擬機的虛擬網卡改變了ip地址,在計算機–>管理–>設備管理器–>網絡適配器–>禁用vm虛擬網卡 試試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章