1. 程式人生 > >Dubbo——整合SpringBoot

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)