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管理介面中可以檢視請求與響應資訊監控:
至此,五個專案如下所示(專案下載地址):