Dubbo——整合SpringBoot
一、建立服務提供者的SpringBoot專案
1、在Eclipse中new一個Spring Starter Project(Eclipse中建立SpringBoot的快捷方式,等價於idea中的Spring Initializr),無需新增模組
2、在pom.xml中新增gmall-api的基礎依賴
<dependency>
<groupId>com.bdm.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>0.0.1-SNAPSHOT</version >
</dependency>
3、實現UserService介面:和之前完全相同
二、建立服務消費者的SpringBoot專案
1、建立專案,新增web模組(消費者以web專案的方式承接前後臺的互動)
2、在pom.xml中新增gmall-api的通用依賴
<dependency>
<groupId>com.bdm.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</ dependency>
3、實現OrderService介面
4、在消費者專案中編寫OrderController
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/initOrder")
public List<UserAddress> initOrder(@RequestParam("uId") String userId) {
return orderService.initOrder (userId);
}
}
這裡將OrderService介面的定義和實現稍作了修改:
public interface OrderService {
public List<UserAddress> initOrder(String userId);
}
三、配置dubbo
1、服務提供者的dubbo配置
①匯入dubbo-starter依賴,在匯入該依賴後會為我們匯入dubbo和操作zk的curator
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
②在application.properties檔案中配置dubbo的相關屬性(以dubbo開頭的屬性)
dubbo.application.name=user-service-provider
dubbo.registry.address=127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry
③暴露服務,在SpringBoot中暴露服務只需要給介面的實現類新增一個@Service註解(但該@Service註解是dubbo提供的而非Spring框架提供的),此時實現類上可能有兩個@Service註解,但是這兩個註解都是必須的,一個負責將類納入到Spring的IOC管理,一個負責暴露dubbo服務
import org.springframework.stereotype.Service;
@Service
@com.alibaba.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "北京市昌平區巨集福科技園綜合樓3層", "1", "李老師", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市寶安區西部矽谷大廈B座3層(深圳分校)", "1", "王老師", "010-56253825", "N");
return Arrays.asList(address1, address2);
}
}
如果覺得dubbo的@Service註解太長了,可以將Spring框架提供的@Service註解替換為@Component,如下所示:此時@Component是由Spring提供的,而@Service是由dubbo提供的,同樣這兩個註解都是必須的
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
@Component
@Service // 暴露dubbo服務
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "北京市昌平區巨集福科技園綜合樓3層", "1", "李老師", "010-56253825", "Y");
UserAddress address2 = new UserAddress(2, "深圳市寶安區西部矽谷大廈B座3層(深圳分校)", "1", "王老師", "010-56253825", "N");
return Arrays.asList(address1, address2);
}
}
④在主配置類中新增@EnableDubbo開啟基於註解的dubbo功能
@EnableDubbo
@SpringBootApplication
public class BootUserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(BootUserServiceProviderApplication.class, args);
}
}
⑤執行main()啟動專案,就可以在監控管理平臺看到註冊的服務:
2、、服務消費者的dubbo配置
①匯入dubbo-starter依賴,在匯入該依賴後會為我們匯入dubbo和操作zk的curator
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
②在application.properties檔案中配置dubbo的相關屬性(以dubbo開頭的屬性)
dubbo.application.name=boot-order-service-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.monitor.protocol=registry
③使用@Reference代替@Autowired註解,實現服務訂閱:使用了@Reference註解後dubbo就會起作用而去註冊中心尋找該介面的實現
@Service//是spring的@Service註解而非dubbo的
public class OrderServiceImpl implements OrderService {
//@Autowired
@Reference
UserService userService;
/**
* 初始化訂單
*/
public List<UserAddress> initOrder(String userId) {
// 查詢使用者的收貨地址,需要呼叫使用者服務
return userService.getUserAddressList(userId);
}
}
④開啟基於註解的dubbo功能:
@EnableDubbo
@SpringBootApplication
public class BootOrderServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(BootOrderServiceConsumerApplication.class, args);
}
}
⑤由於服務消費者是一個web工程,需要修改下埠號避免埠衝突:
server.port=8081
⑥啟動專案,在管理控制檯可以看到多了一個消費者:
⑦訪問:localhost:8081/initOrder?uId=1
總結
:四大步
1、匯入dubbo的starter
2、配置dubbo的相關屬性
3、服務的暴露(@Service)和消費(@Reference)
4、開啟基於註解的dubbo功能(@EnableDubbo)
另外
:消費者最好在服務提供者啟動之後啟動,dubbo的管理控制檯和監控中心可以在必要的時候啟動,在啟動這些專案的時候一定要先啟動註冊中心(如ZK)