Consumer搭建
生活随笔
收集整理的這篇文章主要介紹了
Consumer搭建
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們剛才通過(guò)admin管理界面,已經(jīng)確定好了,我的服務(wù)方是發(fā)布成功的,所以下面我們就可以創(chuàng)建一個(gè)消費(fèi)者,選擇一個(gè)Maven Project,隨便起個(gè)名,dubbo-consumer,這個(gè)是什么類(lèi)型的,這就是標(biāo)準(zhǔn)的WEB項(xiàng)目,它是標(biāo)準(zhǔn)的WEB項(xiàng)目,所以這里要選擇war,那在這里做的時(shí)候,有人說(shuō)我不想建成WEB類(lèi)型,就想要一個(gè)jar類(lèi)型,能不能測(cè)試出這個(gè)效果,可以的,不是必須的,那我們就來(lái)一下,只要你能保證配置文件被加載,建什么項(xiàng)目都沒(méi)關(guān)系,還叫dubbo-consumer,他的環(huán)境和dubbo-service-impl的環(huán)境是一樣的,首先他的pom.xml的東西,第一個(gè)接口,這個(gè)東西是非常有必要的,如果消費(fèi)者不引入dubbo-service接口,那個(gè)類(lèi)需要?jiǎng)?chuàng)建哪個(gè)對(duì)象它是不知道的,第二個(gè)因?yàn)槲沂窍M(fèi)者,dubbo這塊該有的還是得有,去掉了老版本新版本還是得有,按照講的原理圖,消費(fèi)者需要訪問(wèn)注冊(cè)中心,是不是需要去訂閱啊,所以zkclient也得有,所以這幾個(gè)包都要拿過(guò)來(lái)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>dubbo-consumer</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>com.learn</groupId><artifactId>dubbo-service</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency></dependencies>
</project>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 叫consumer --><dubbo:application name="dubbo-consumer"/><!-- 注冊(cè)中心需不需要 想想,是不是一定得需要的,不告訴他注冊(cè)中心在哪,consumer去哪訪問(wèn)注冊(cè)中心啊,--><dubbo:registry address="localhost:2181" protocol="zookeeper"></dubbo:registry><!-- 這個(gè)可以不要 是不是得需要的,因?yàn)檫@一步從注冊(cè)中心獲得provider的地址和端口號(hào),所以這一步不用配,--><!-- <dubbo:protocol name="dubbo" port="20888"></dubbo:protocol> --><!-- 這里需不需要寫(xiě),這里一定是不需要寫(xiě)的 --><!-- <dubbo:service interface="com.learn.service.DemoService" ref="demoServiceImpl"></dubbo:service><bean id="demoServiceImpl" class="com.learn.service.impl.DemoServiceImpl"></bean> --><!-- 我們這里需要寫(xiě)什么呢 消費(fèi)者當(dāng)注解用,沒(méi)有任何沖突,提供者那邊有沖突,那我們這邊可以配置一個(gè)注解驅(qū)動(dòng)配置注解掃描,掃描一下,哪個(gè)在哪個(gè)包中,dubbo:annotation里面有個(gè)package,com.learn.service.impl有沒(méi)有發(fā)現(xiàn)重包了,剛才起包沒(méi)起好,正常我們這么起最好我在service方起包的時(shí)候,com.learn.dubbo.service,service實(shí)現(xiàn)類(lèi)就是com.learn.dubbo.service.impl然后consumer是有多個(gè)的,我們這里就換個(gè)名吧,叫consumer吧,com.learn.consumer.service.impl,什么意思來(lái)的,注意他掃的是誰(shuí),掃的可不是接口,跟接口沒(méi)關(guān),和provider一點(diǎn)關(guān)系也沒(méi)有,是自己項(xiàng)目的一個(gè)包,所以我在這里面需要新建一個(gè)接口--><dubbo:annotation package="com.learn.consumer.service.impl" /><!-- 為什么一定要寫(xiě)testImpl這個(gè) 一定要注意啊,寫(xiě)<bean id="testImpl" class="com.learn.consumer.service.impl.TestServiceImpl" >這個(gè),是為了讓Spring容器管理, --><bean id="testImpl" class="com.learn.consumer.service.impl.TestServiceImpl" ></bean>
</beans>
package com.learn.consumer.service;/*** 這里是個(gè)接口,要不要寫(xiě)個(gè)實(shí)現(xiàn)類(lèi)* 不用* 消費(fèi)者方和我們平時(shí)寫(xiě)的WEB項(xiàng)目* 唯一的不同就是mapper不用寫(xiě)了* 其他的該怎么寫(xiě)還是怎么寫(xiě)* 正常我們的WEB項(xiàng)目是建實(shí)體類(lèi)和mapper* mapper現(xiàn)在不用寫(xiě)* 那下面該干什么呢* 下面就是service* service下就是impl* 就是正常些就行了* 消費(fèi)者就是一個(gè)普通的標(biāo)準(zhǔn)項(xiàng)目* @author Leon.Sun**/
public interface TestService {/*** 里面隨便做件事情*/void test();}
package com.learn.service;public interface DemoService {/*** 在這里* * @param name* @return*/String demo(String name);}
package com.learn.consumer.service.impl;import com.alibaba.dubbo.config.annotation.Reference;
import com.learn.consumer.service.TestService;
import com.learn.service.DemoService;/*** 在上面這里我來(lái)添加實(shí)現(xiàn)* 添加未實(shí)現(xiàn)方法* @author Leon.Sun**/
public class TestServiceImpl implements TestService {/*** 我們?cè)谶@里寫(xiě)的時(shí)候* 消費(fèi)者方就聲明一個(gè)* 叫做DemoService* 上面加上一個(gè)注解* 我們剛才在配置文件里加的注解掃描* 看是不是這個(gè)包* 掃的他的目的就是為了掃@Reference他* 看哪里的* com.alibaba.dubbo.config.annotation.Reference;* dubbo的* 這個(gè)注解就表示* 從注冊(cè)中心獲取該類(lèi)的代理對(duì)象* 當(dāng)我們使用該對(duì)象真實(shí)的去調(diào)用方法的時(shí)候* 通過(guò)代理對(duì)象調(diào)用方法* 一會(huì)我們打個(gè)斷點(diǎn)看一下* 下面正常調(diào)用就行了* */@Referenceprivate DemoService demoService;@Overridepublic void test() {/*** 現(xiàn)在這里要調(diào)用provider要提供的功能* 怎么調(diào)呢* 我們現(xiàn)在這個(gè)功能在哪里了* 在哪個(gè)接口里了* 里面有個(gè)什么方法* 叫demo()* 傳進(jìn)去一個(gè)名字叫張三* 返回的叫name*/String name = demoService.demo("張三");/*** 輸出name*/System.out.println(name);}
}
package com.learn.consumer.test;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.learn.consumer.service.impl.TestServiceImpl;/*** 寫(xiě)個(gè)測(cè)試類(lèi)測(cè)試一下* 消費(fèi)者方所有的配置信息都在這里了* applicationContext-dubbo.xml* 所以我們?cè)趩?dòng)的時(shí)候* * @author Leon.Sun**/
public class Test {public static void main(String[] args) {/*** 老規(guī)矩我還是得這么做* 這是干什么呢這是* 加載配置文件* applicationContext-dubbo.xml* 往里放*/ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");/*** 我們現(xiàn)在要調(diào)哪個(gè)類(lèi)的哪個(gè)方法* 是不是TestServiceImpl這個(gè)類(lèi)的test這個(gè)方法* 現(xiàn)在是想從Spring容器中把這個(gè)類(lèi)調(diào)出來(lái)* 怎么在Spring容器中配置一個(gè)類(lèi)對(duì)象* 是不是bean* 這是單獨(dú)測(cè)的時(shí)候* web項(xiàng)目不這么寫(xiě)* ac.getBean* 名字叫testImpl* 類(lèi)型叫* 返回值就叫t了*/TestServiceImpl t = ac.getBean("testImpl",TestServiceImpl.class);/*** t調(diào)剛才的方法名叫test* 就完事了* 我們跑一下* 服務(wù)方我們還沒(méi)有起* 傳遞過(guò)來(lái)的name:張三* 我們要的就是這個(gè)東西* 就通過(guò)這樣的一個(gè)功能就調(diào)用到了* 現(xiàn)在我們演示的是一個(gè)JAVA項(xiàng)目*/t.test();}
}
?
總結(jié)
以上是生活随笔為你收集整理的Consumer搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Admin管理界面
- 下一篇: jconsole工具检测堆内存变化