1. 程式人生 > >阿里dubbo框架使用系列:服務提供者和消費者的建立和使用

阿里dubbo框架使用系列:服務提供者和消費者的建立和使用

新建一個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控制檯看到相關資訊