阿里dubbo框架使用系列:服務提供者和消費者的建立和使用
阿新 • • 發佈:2019-01-27
新建一個maven工程
建立一個服務介面
package com.pcx.dubbo_facade;
public interface DemoService {
String sayHello(String name);
}
執行 clean install打包dubbo-facade
接下來建立 dubbo-provider 工程
在pom.xml裡面引用剛才的服務介面的jar包
<span style="white-space:pre"> </span><dependency> <groupId>com.pcx</groupId> <span style="white-space:pre"> </span><artifactId>dubbo-facade</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
編寫服務實現類
package com.pcx.dubbo_prodiver;
import org.springframework.stereotype.Service;
import com.pcx.dubbo_facade.DemoService;
@Service("demoService")
public class DemoServiceImpl implements DemoService {
public String sayHello(String name) {
return "Hello " + name;
}
}
在resource目錄下編寫兩個spring配置檔案
dubbo-provider.xml
<?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="dubbo-demo-provider" /> <!--zk註冊中心的地址--> <dubbo:registry protocol="zookeeper" address="192.168.1.10:2181" /> <!-- 用dubbo協議在21000埠暴露服務 --> <dubbo:protocol name="dubbo" port="21000" /> <!-- 配置服務介面 --> <dubbo:service interface="com.pcx.dubbo_facade.DemoService" ref="demoService" /> </beans>
spring-context.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
default-autowire="byName" default-lazy-init="false">
<!-- 採用註釋的方式配置bean -->
<context:annotation-config />
<!-- 配置要掃描的包的路徑 -->
<context:component-scan base-package="com.pcx" />
<import resource="dubbo-provider.xml" />
</beans>
在src/test/java路徑下編寫測試類啟動dubbo服務
package com.pcx.dubbo_prodiver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DubboProvider {
private static final Log log = LogFactory.getLog(DubboProvider.class);
public static void main(String[] args) {
try {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
context.start();
} catch (Exception e) {
log.error("== DubboProvider context start error:",e);
}
synchronized (DubboProvider.class) {
while (true) {
try {
DubboProvider.class.wait();
} catch (InterruptedException e) {
log.error("== synchronized error:",e);
}
}
}
}
}
執行這個測試類,我們可以在dubbo控制檯看到我們暴露的服務
建立一個新工程名為dobbo-consumer
在pom.xml下依賴我們的服務介面的jar包
<span style="white-space:pre"> </span><dependency>
<groupId>com.pcx</groupId>
<artifactId>dubbo-facade</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在src/main/resource/目錄下新增兩個spring配置檔案
dubbo-consumer.xml
<?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="dubbo-demo-consumer" />
<!-- 填寫zk註冊中心的地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.1.10:2181" />
<!-- 引用服務提供介面的路徑 -->
<dubbo:reference interface="com.pcx.dubbo_facade.DemoService" id="demoService" check="false" />
</beans>
spring-context.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"
>
<import resource="dubbo-consumer.xml" />
</beans>
編寫呼叫服務的測試類在src/test/java
package com.pcx.dubbo_consumer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.pcx.dubbo_facade.DemoService;
public class Consumer {
private static final Log log = LogFactory.getLog(Consumer.class);
public static void main(String[] args) throws InterruptedException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
context.start();
DemoService demoService = (DemoService)context.getBean("demoService");
String hello = demoService.sayHello("world");
log.info("列印"+hello);
Thread.sleep(100000);
}
}
執行測試類
呼叫成功
此時可以在dubbo控制檯看到相關資訊