1. 程式人生 > >SpringBoot整合Dubbo和Zookeeper升級版

SpringBoot整合Dubbo和Zookeeper升級版

分散式架構與Dubbo基礎入門與實踐一文中初步介紹了分散式架構並使用xml配置方式進行了Dubbo和Zookeeper實踐。分散式應用簡單入門及SpringBoot整合Dubbo+Zookeeper一文中使用SpringBoot整合了Dubbo和Zookeeper但是並未抽取公共API專案。本文是上述兩個專案的升級版。

【1】建立SpringBoot專案

① 使用Spring starter pproject 分別建立provider和consumer

在這裡插入圖片描述


② 分別將普通專案中的實現拷貝到boot專案中

如這裡將order-service-consumer專案中的實現類及包拷貝到boot-order-service-consumer專案中:

在這裡插入圖片描述


③ 分別為兩個boot專案新增gmall-interface專案依賴

當然是要依賴公共API專案了:

<dependency>
	<groupId>com.jane.dubbo</groupId>
	<artifactId>gmall-interface</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

④ 為消費者專案編寫controller

如下所示,攔截頁面請求:

@Controller
public class OrderController {
	
	@Autowired
	OrderService orderService;
	
	@ResponseBody
	@RequestMapping("/initOrder")
	public List<UserAddress> initOrder(@RequestParam("uid")String userId) {
		return orderService.initOrder(userId);
	}

}

現在專案建立好了,但是遠端呼叫肯定是失敗的,需要進行服務配置。


【2】配置服務提供者

① 匯入dubbo-starter

<dependency>
	<groupId>com.alibaba.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>0.2.0</version>
</dependency>

注意starter版本適配:
在這裡插入圖片描述


② 配置application.properties

//application.name就是服務名,不能跟別的dubbo提供端重複
//registry.protocol 是指定註冊中心協議
//registry.address 是註冊中心的地址加埠號
dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper

//protocol.name 是分散式固定是dubbo,不要改。
//protocol.port是其他服務與本服務通訊的埠
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

dubbo.monitor.protocol=registry



此時還沒有暴露服務,這個彆著急,使用Dubbo的@Service註解。


③ Dubbo的@Service註解暴露服務

如下所示:

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.web.gmall.bean.UserAddress;
import com.web.gmall.service.UserService;

@Service
@Component
public class UserServiceImpl implements UserService {
	//...
}

④ 在主程式啟動類中使用@EnableDubbo註解以開啟基於註解的dubbo功能

如下所示:

@EnableDubbo//開啟基於註解的dubbo功能
@SpringBootApplication
public class BootUserServiceProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(BootUserServiceProviderApplication.class, args);
	}
}

⑤ 啟動主程式,檢視Dubbo Admin

多了一個伺服器提供者:

在這裡插入圖片描述


【3】配置服務消費者

① 匯入dubbo-starter

<dependency>
	<groupId>com.alibaba.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>0.2.0</version>
</dependency>

② 配置application.properties

server.port=8081

dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry

這裡還沒有宣告要呼叫哪個遠端服務,同樣使用註解實現。


③ 使用@Reference註解引用遠端的服務

import com.alibaba.dubbo.config.annotation.Reference;

@Service
public class OrderServiceImpl implements OrderService {
	@Reference
	UserService userService;
	//...
}

④ 在主程式啟動類中使用@EnableDubbo註解以開啟基於註解的dubbo功能

@EnableDubbo
@SpringBootApplication
public class BootOrderServiceConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
	}
}

⑤ 啟動主程式,檢視Dubbo Admin

多了一個服務消費者:

在這裡插入圖片描述


⑥ 由於消費者是一個web工程,使用瀏覽器傳送請求進行測試

在這裡插入圖片描述

多重新整理瀏覽器(多次請求),在Monitor管理介面中可以檢視請求與響應資訊監控:
在這裡插入圖片描述
在這裡插入圖片描述

至此,五個專案如下所示(專案下載地址):

在這裡插入圖片描述