1. 程式人生 > >maven中dubbo的釋出服務與使用服務

maven中dubbo的釋出服務與使用服務

Dubbo是阿里巴巴公司開源的一個高效能優秀的,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和框架無縫整合。

一、在服務端的pom.xml檔案中新增dubbo的依賴

<!-- dubbo相關 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.jboss.netty</groupId>
			<artifactId>netty</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
</dependency>

<!-- 出現java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy錯誤時加的 -->
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-framework</artifactId>
	<version>4.0.1</version>
</dependency> 

沒有版本號對吧?因為在父工程裡面的pom.xml裡都指定了版本號了

<properties>
	<junit.version>4.12</junit.version>
	<spring.version>5.0.3.RELEASE</spring.version>
	<mybatis.version>3.4.5</mybatis.version>
	<mybatis.spring.version>1.3.2</mybatis.spring.version>
	<mybatis.paginator.version>1.2.17</mybatis.paginator.version>
	<mysql.version>8.0.11</mysql.version>
	<slf4j.version>1.7.25</slf4j.version>
	<jackson.version>2.9.5</jackson.version>
	<druid.version>1.1.9</druid.version>		<!-- Druid是Java語言中最好的資料庫連線池。Druid能夠提供強大的監控和擴充套件功能。 -->
	<!-- HttpClient 是Apache Jakarta Common 下的子專案,可以用來提供高效的、最新的、功能豐富的支援 HTTP 協議的客戶端程式設計工具包,並且它支援 HTTP 協議最新的版本和建議。 -->
	<httpclient.version>4.3.5</httpclient.version>  
	<jstl.version>1.2</jstl.version>
	<servlet-api.version>2.5</servlet-api.version>
	<jsp-api.version>2.0</jsp-api.version>
	<joda-time.version>2.5</joda-time.version>
	<commons-lang3.version>3.3.2</commons-lang3.version>
	<!-- <commons-io.version>2.6</commons-io.version> -->
	<commons-io.version>1.3.2</commons-io.version>
	<commons-net.version>3.3</commons-net.version>
	<!-- <pagehelper.version>3.4.2-fix</pagehelper.version> -->
	<pagehelper.version>5.1.4</pagehelper.version>
	<jsqlparser.version>1.1</jsqlparser.version>	<!-- JSqlParser解析SQL語句,並轉化為Java類的層次結構,生成的層次結構可使用訪問者模式。 -->
	<commons-fileupload.version>1.3.3</commons-fileupload.version>
	<jedis.version>2.9.0</jedis.version>		<!-- jedis就是集成了redis的一些命令操作,封裝了redis的java客戶端。提供了連線池管理。一般不直接使用jedis,而是在其上在封裝一層,作為業務的使用。 -->
	<solrj.version>7.3.0</solrj.version>	<!-- Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件,並對索引、搜尋效能進行了優化。 --><!-- 
	Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。
	簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,
	並且本質上是個服務呼叫的東東,說白了就是個遠端服務呼叫的分散式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊) -->
	<dubbo.version>2.6.1</dubbo.version><!-- 
	ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,它是叢集的管理者,
	監視著叢集中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者 -->
	<zookeeper.version>3.4.12</zookeeper.version>
	<zkclient.version>0.1</zkclient.version>  
	<activemq.version>5.11.2</activemq.version><!-- 就是message queue,也就是訊息佇列,也就是處理訊息的,也就是處理JMS的。 -->
	<!-- freeMarker則是提前根據模板生成好html的靜態頁面,這樣在訪問時,直接訪問到的就是一個靜態頁面,這個就是效率問題了,不過freeMarker適合用變化不大,但是內容很多的網頁。 -->
	<freemarker.version>2.3.28</freemarker.version>
	<quartz.version>2.3.0</quartz.version><!-- 定時任務 -->
</properties>

<!-- dubbo相關 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>${dubbo.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>${zookeeper.version}</version>
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
	<version>${zkclient.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.activemq</groupId>
	<artifactId>activemq-all</artifactId>
	<version>${activemq.version}</version>
</dependency>
<dependency>
	<groupId>org.freemarker</groupId>
	<artifactId>freemarker</artifactId>
	<version>${freemarker.version}</version>
</dependency>

下面的使用服務裡面照樣也沒有版本號

二、在釋出方的spring配置檔案中新增dubbo的約束,然後使用dubbo:service釋出服務。------>釋出成功

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context" 
	   xmlns:p="http://www.springframework.org/schema/p"
	   xmlns:aop="http://www.springframework.org/schema/aop" 
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans 
						   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
						   http://www.springframework.org/schema/context 
						   http://www.springframework.org/schema/context/spring-context-4.0.xsd
						   http://www.springframework.org/schema/aop 
						   http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
						   http://www.springframework.org/schema/tx 
						   http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
						   http://www.springframework.org/schema/util 
						   http://www.springframework.org/schema/util/spring-util-4.0.xsd
						   http://code.alibabatech.com/schema/dubbo 
						   http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	
	<!-- spring 可以自動去掃描 base-package下面的包或子包下面的Java檔案,如果掃描到有Spring的相關注解的類,則把這些類註冊為Spring的bean -->
	<context:component-scan base-package="com.shun.service"/>
	
	<!-- 使用dubbo釋出服務 -->
	<!-- 提供方應用資訊,用於計算依賴關係 -->
	<dubbo:application name="ylf-manager" />
	<!-- 使用zookeeper作為註冊中心,這個註冊中心放在linux機上,記得啟動 https://blog.csdn.net/qq_36138324/article/details/80197802 -->
	<dubbo:registry protocol="zookeeper" address="${zookeeper.ipAndProt}" />
	<!-- 用dubbo協議預設在20880埠暴露服務,預設埠是20880 -->
	<dubbo:protocol name="dubbo" port="20880" />
	<!-- 宣告需要暴露的服務介面,引用的itemServiceImpl來自於spring自動掃描到的實現類,實現類的類名上寫了@Service -->
	<dubbo:service interface="com.shun.service.ItemService" ref="itemServiceImpl" />
	
</beans>

三、使用端的呼叫,新增依賴到pom.xml

<!-- dubbo相關 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring</artifactId>
		</exclusion>
		<exclusion>
			<groupId>org.jboss.netty</groupId>
			<artifactId>netty</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
</dependency>		<!-- 出現java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy錯誤時加的 -->
<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-framework</artifactId>
	<version>4.0.1</version>
</dependency>

四、在使用端的springmvc的配置檔案中新增服務的引用。------>呼叫配置完畢

<?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:p="http://www.springframework.org/schema/p"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 
	   xsi:schemaLocation="http://www.springframework.org/schema/beans 
						   http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
				           http://www.springframework.org/schema/mvc 
				           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
				           http://www.springframework.org/schema/context 
				           http://www.springframework.org/schema/context/spring-context-4.0.xsd
				           http://code.alibabatech.com/schema/dubbo 
				           http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	
	<!-- spring 可以自動去掃描 base-package下面的包或子包下面的Java檔案,如果掃描到有Spring的相關注解的類,則把這些類註冊為Spring的bean -->
	<context:component-scan base-package="com.shun.controller"/>
		
	<!-- 配置註解驅動,用來配置量兩大元件
	<mvc:annotation-driven /> 是一種簡寫形式,完全可以手動配置替代這種簡寫形式,簡寫形式可以讓初學都快速應用預設配置方案。
	<mvc:annotation-driven /> 會自動註冊DefaultAnnotationHandlerMapping與AnnotationMethodHandlerAdapter 兩個bean
	是spring MVC為@Controllers分發請求所必須的,即解決了@Controller註解使用的前提配置。
  	同時它還提供了:資料繫結支援,@NumberFormatannotation支援,@DateTimeFormat支援,@Valid支援
  	讀寫XML的支援(JAXB,讀寫JSON的支援(Jackson)。
  	我們處理響應ajax請求時,就使用到了對json的支援(配置之後,在加入了jackson的core和mapper包之後,不寫配置檔案也能自動轉換成json) -->
	<mvc:annotation-driven/>
		
	<!-- 配置檢視直譯器加上上面的mvc:annotation-driven就叫做三大元件 --> 
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
	
	<!-- 放行靜態資源 	如js/jquery.dataTables.min.js  -->
	<mvc:resources location="/css/" mapping="/css/**"/>
	<mvc:resources location="/js/" mapping="/js/**"/>
	<mvc:resources location="/fonts/" mapping="/fonts/**"/>
	
	<!-- 引用dubbo服務 -->
	<dubbo:application name="ylf-web"/>
	<dubbo:registry protocol="zookeeper" address="118.89.226.190:2181"/><!-- 	
	<dubbo:reference interface="com.shun.service.ItemService" id="itemServiceImpl" /> -->
	<dubbo:reference id="itemServiceImpl" interface="com.shun.service.ItemService" check="false" timeout="12000"/>  
	
</beans>


五、分別在服務端與呼叫端新增tomcat7外掛,埠記得改一下,這裡就只展示一個


  	<build>
		<plugins>
			<!-- 配置Tomcat外掛 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>8080</port>	<!-- 埠直接可以在這裡進行修改 -->
					<path>/</path>		<!-- 配置斜槓能夠達到預設訪問localhost:8080就可以訪問專案的目的 -->
				</configuration>
			</plugin>
		</plugins>
	</build>