一個電商專案的Web服務化改造7:Dubbo服務的呼叫,4個專案

小雷FansUnion發表於2016-05-01
使用dubbo服務的過程,很簡單,和之前學習的WebService完全一樣,和本地介面呼叫也基本一致。

    
dubbo和WebService的區別:我認為dubbo就是封裝了WebService,然後提供了更多的配套功能。看jar包依賴,dubbo依賴的WebService。(青出於藍,而勝於藍。冰,水為之,而寒於水。)
    dubbo介面和本地service介面的區別:dubbo呼叫的是遠端方法,本地呼叫的本地方法


    作為服務的實現方,或者說最初負責“服務化改造” 的人來說,你需要考慮到怎麼簡化呼叫方的工作,怎麼測試服務方的介面。因此, 我認為需要4個專案。

1.介面專案-呼叫者只需要知道這個
   服務呼叫方和服務提供方的互動介面。
   定義服務的介面,公共的mobel、bean等實體類。
   BrandService.java,Brand.java,BrandBean.java
  
   dubbo服務配置:

 
<dubbo:reference id="brandService" interface="com.webservice.service.front.BrandService" version="1.0.0"
   url="webservice://127.0.0.1:9000/com.webservice.service.front.BrandService"/>
 
2.介面實現專案-服務的實現者 
   BrandServiceImpl.java
   其它相關程式碼和配置
  
<bean id="brandService" class="com.webservice.service.impl.BrandServiceImpl"/>
   
 <dubbo:service interface="com.webservice.service.front.BrandService" version="1.0.0"
   protocol="webservice" ref="brandService"/>
 
3.本地測試專案 
   單元測試:mapper、dao、service
   參考前一篇的單元測試程式碼,初始化+標準4步

4.dubbo遠端測試專案 
   
單元測試:service(不可能知道dao和mapper的實現),參考上一篇單元測試程式碼
   
Java應用測試:service,呼叫方也可能是普通的Java應用程式呼叫(模擬真實場景1)
   Web應用測試 service,呼叫方,有較大可能是Web專案呼叫(模擬真實場景2)

 
 public class BrandServiceTest {
	public static void main(String[] args) {
		String configLocation = "classpath*:spring-context-nodubbo.xml";
		configLocation = "spring-context-dubbo.xml";
		ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
				configLocation);
		classPathXmlApplicationContext.start();
		BrandService brandService = (BrandService) classPathXmlApplicationContext
				.getBean("brandServiceImpl");
		//BrandService brandService = (BrandService) classPathXmlApplicationContext
			//	.getBean(BrandService.class);
		//找不到,名字是brandServiceImpl,或者根據型別
		//BrandService brandService = (BrandService) classPathXmlApplicationContext
		//		.getBean("brandService");
		List<Brand> brandList = brandService.listAll();
		for (Brand brand : brandList) {
			System.out.println("=====================================");
			System.out.println(brand.getName());
			System.out.println("=====================================");
		}
		classPathXmlApplicationContext.close();

	}
} 



@Controller
@RequestMapping("brand")
public class BrandController {

	@Autowired
	private BrandService brandService;
	
	@ResponseBody
	@RequestMapping("listAll")
	public List<Brand> listAll(){
		return brandService.listAll();
	}
	
}

 
 個人觀察:面向介面程式設計。介面呼叫方,只知道介面,而不知道實現, 真是不錯。

相關文章