SpringBoot整合dubbo

市面上大概是用兩種方式使用微服務,①dubbo,②,springcloud;java

dubbo是使用rpc進行服務調度,而springcloud是用輕量級的http方式;dobbo側重於服務間通訊,在負載均衡,網關,路由,熔斷方面依賴於第三方,而springcloud則提供了一整套完整的解決方案。且zookeeper偏向於保證一致性,而springcloud 的eureka 是偏向於高可用的。git

1,準備

①,docker安裝zookeepergithub

#拉取zookeeper,使用鏡像加速,不然極可能下載不下來
docker pull registry.docker-cn.com/library/zookeeper

#運行zookeeper鏡像
#--name 指定容器名,-p 表示暴露的端口  --restart 自動重啓 -d 後臺運行,最後帶上鏡像id
docker run  --name zk -p 2181:2181 --restart always -d bf5cbc9d5cac

②,dubbo如今是apache的項目web

官網地址:http://dubbo.apache.org/spring

③,點擊view to GitHub,這裏有springboot整合dubbo的詳細說明docker

2,版本說明

這裏以springboot的1.5x版本爲例apache

3,項目結構

①,利用idea先建立一個空工程,而後給其添加,api模塊,provide模塊,customer模塊api

②,eclipse中直接建立一個類型爲pom是父工程,而後右鍵父工程給其添加maven模塊便可。瀏覽器

4,api模塊

①,做用:用於定義公共的接口,給provider和customer依賴springboot

②,pom.xml

<--用於構建項目--> 
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

③,定義一個買票接口

public interface TicketService {
    String buyTicket();
}

④,利用maven插件將api工程安裝到maven倉庫,供provider和customer依賴

⑤,雙擊install

⑥,當控制檯輸出BUILD SUCCESS,說明安裝成功

5,provider配置

①,pom.xml

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.12.RELEASE</version>
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--引入dubbo的場景啓動器-->
	<dependency>
		<groupId>com.alibaba.boot</groupId>
		<artifactId>dubbo-spring-boot-starter</artifactId>
		<version>0.1.0</version>
	</dependency>
	<!-- 引入zookeeper的客戶端 -->
	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>

	<!--引入公共的api-->
	<dependency>
		<groupId>com.api</groupId>
		<artifactId>api</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
</dependencies>

②,application.properties 配置

#應用名
dubbo.application.name=ticket-provider
#註冊地址
dubbo.registry.address=zookeeper://192.168.43.28:2181
#須要掃描的包
dubbo.scan.base-packages=com.provider.ticketprovider.ticket.service.impl

③,編寫提供者

import com.api.api.ticket.service.TicketService;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;

@Component
//這個是dobbo的Service 註解
@Service
public class TicketServiceImpl implements TicketService {
    @Override
    public String buyTicket() {
        return "《死亡筆記》";
    }
}

因爲TicketServiceImpl 加上了dubbo的@Service註解,在應用啓動後,會將這個提供者註冊到zookeeper,這樣消費者就能消費這個服務。

6,customer配置

①,pom.xml

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.5.12.RELEASE</version>
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
</properties>

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--引入dubbo的場景啓動器-->
	<dependency>
		<groupId>com.alibaba.boot</groupId>
		<artifactId>dubbo-spring-boot-starter</artifactId>
		<version>0.1.0</version>
	</dependency>
	<!-- 引入zookeeper的客戶端 -->
	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>

	<!--引入公共的api-->
	<dependency>
		<groupId>com.api</groupId>
		<artifactId>api</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
</dependencies>

②,application.properties 配置

dubbo.application.name=ticket-customer
dubbo.registry.address=zookeeper://192.168.43.28:2181

server.port=8083

③,controller層代碼

import com.alibaba.dubbo.config.annotation.Reference;
import com.api.api.ticket.service.TicketService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CustomerController {
    // 將會獲得Ticket服務
    @Reference
    private TicketService ticketService;

    @RequestMapping("/")
    public String index(){
        return ticketService.buyTicket();
    }
}

7,測試

①,先啓動provider

②,再啓動customer

③,瀏覽器調度消費者的消費方法

④,看到上圖,說明調度成功

相關文章
相關標籤/搜索