Consumer搭建
生活随笔
收集整理的這篇文章主要介紹了
Consumer搭建
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們剛才通過admin管理界面,已經確定好了,我的服務方是發(fā)布成功的,所以下面我們就可以創(chuàng)建一個消費者,選擇一個Maven Project,隨便起個名,dubbo-consumer,這個是什么類型的,這就是標準的WEB項目,它是標準的WEB項目,所以這里要選擇war,那在這里做的時候,有人說我不想建成WEB類型,就想要一個jar類型,能不能測試出這個效果,可以的,不是必須的,那我們就來一下,只要你能保證配置文件被加載,建什么項目都沒關系,還叫dubbo-consumer,他的環(huán)境和dubbo-service-impl的環(huán)境是一樣的,首先他的pom.xml的東西,第一個接口,這個東西是非常有必要的,如果消費者不引入dubbo-service接口,那個類需要創(chuàng)建哪個對象它是不知道的,第二個因為我是消費者,dubbo這塊該有的還是得有,去掉了老版本新版本還是得有,按照講的原理圖,消費者需要訪問注冊中心,是不是需要去訂閱啊,所以zkclient也得有,所以這幾個包都要拿過來
<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"/><!-- 注冊中心需不需要 想想,是不是一定得需要的,不告訴他注冊中心在哪,consumer去哪訪問注冊中心啊,--><dubbo:registry address="localhost:2181" protocol="zookeeper"></dubbo:registry><!-- 這個可以不要 是不是得需要的,因為這一步從注冊中心獲得provider的地址和端口號,所以這一步不用配,--><!-- <dubbo:protocol name="dubbo" port="20888"></dubbo:protocol> --><!-- 這里需不需要寫,這里一定是不需要寫的 --><!-- <dubbo:service interface="com.learn.service.DemoService" ref="demoServiceImpl"></dubbo:service><bean id="demoServiceImpl" class="com.learn.service.impl.DemoServiceImpl"></bean> --><!-- 我們這里需要寫什么呢 消費者當注解用,沒有任何沖突,提供者那邊有沖突,那我們這邊可以配置一個注解驅動配置注解掃描,掃描一下,哪個在哪個包中,dubbo:annotation里面有個package,com.learn.service.impl有沒有發(fā)現重包了,剛才起包沒起好,正常我們這么起最好我在service方起包的時候,com.learn.dubbo.service,service實現類就是com.learn.dubbo.service.impl然后consumer是有多個的,我們這里就換個名吧,叫consumer吧,com.learn.consumer.service.impl,什么意思來的,注意他掃的是誰,掃的可不是接口,跟接口沒關,和provider一點關系也沒有,是自己項目的一個包,所以我在這里面需要新建一個接口--><dubbo:annotation package="com.learn.consumer.service.impl" /><!-- 為什么一定要寫testImpl這個 一定要注意啊,寫<bean id="testImpl" class="com.learn.consumer.service.impl.TestServiceImpl" >這個,是為了讓Spring容器管理, --><bean id="testImpl" class="com.learn.consumer.service.impl.TestServiceImpl" ></bean>
</beans>
package com.learn.consumer.service;/*** 這里是個接口,要不要寫個實現類* 不用* 消費者方和我們平時寫的WEB項目* 唯一的不同就是mapper不用寫了* 其他的該怎么寫還是怎么寫* 正常我們的WEB項目是建實體類和mapper* mapper現在不用寫* 那下面該干什么呢* 下面就是service* service下就是impl* 就是正常些就行了* 消費者就是一個普通的標準項目* @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;/*** 在上面這里我來添加實現* 添加未實現方法* @author Leon.Sun**/
public class TestServiceImpl implements TestService {/*** 我們在這里寫的時候* 消費者方就聲明一個* 叫做DemoService* 上面加上一個注解* 我們剛才在配置文件里加的注解掃描* 看是不是這個包* 掃的他的目的就是為了掃@Reference他* 看哪里的* com.alibaba.dubbo.config.annotation.Reference;* dubbo的* 這個注解就表示* 從注冊中心獲取該類的代理對象* 當我們使用該對象真實的去調用方法的時候* 通過代理對象調用方法* 一會我們打個斷點看一下* 下面正常調用就行了* */@Referenceprivate DemoService demoService;@Overridepublic void test() {/*** 現在這里要調用provider要提供的功能* 怎么調呢* 我們現在這個功能在哪里了* 在哪個接口里了* 里面有個什么方法* 叫demo()* 傳進去一個名字叫張三* 返回的叫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;/*** 寫個測試類測試一下* 消費者方所有的配置信息都在這里了* applicationContext-dubbo.xml* 所以我們在啟動的時候* * @author Leon.Sun**/
public class Test {public static void main(String[] args) {/*** 老規(guī)矩我還是得這么做* 這是干什么呢這是* 加載配置文件* applicationContext-dubbo.xml* 往里放*/ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");/*** 我們現在要調哪個類的哪個方法* 是不是TestServiceImpl這個類的test這個方法* 現在是想從Spring容器中把這個類調出來* 怎么在Spring容器中配置一個類對象* 是不是bean* 這是單獨測的時候* web項目不這么寫* ac.getBean* 名字叫testImpl* 類型叫* 返回值就叫t了*/TestServiceImpl t = ac.getBean("testImpl",TestServiceImpl.class);/*** t調剛才的方法名叫test* 就完事了* 我們跑一下* 服務方我們還沒有起* 傳遞過來的name:張三* 我們要的就是這個東西* 就通過這樣的一個功能就調用到了* 現在我們演示的是一個JAVA項目*/t.test();}
}
?
總結
以上是生活随笔為你收集整理的Consumer搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Admin管理界面
- 下一篇: jconsole工具检测堆内存变化