SpringBoot2.0+Dubbo+Zookeeper 實現簡單的服務調(註解版)


網上t整合DUBBO的springBoot大都是1.#版本的,現在springBoot 的版本都已經2.#了,springBoot版本升級後區別跟之前還是挺大的,網上的例子百分之九十的整合有問題(反正拉下來的代碼是不能運行的),而且還都是配置xml。我個人還是喜歡升級後的springBoot,做項目也大多用的是2.#的版本。恰好,項目中正好用到了dubbo,自己整合一版就當學習!

1. 項目結構

項目地址:git 地址
說明:項目爲子父模塊,dubboExample爲父工程,紅框中的爲子模塊。
在這裏插入圖片描述

1.1 父工程 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zxf</groupId>
  <artifactId>dubboExample</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>dubboExample</name>
  <description>dubboExample</description>
  <packaging>pom</packaging>
  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
   		<maven.compiler.target>1.8</maven.compiler.target>
        <java.version>1.8</java.version>
        <curator-framework>4.0.1</curator-framework>
		<zookeeper.version>3.4.13</zookeeper.version>
		<dubbo.starter.version>0.2.0</dubbo.starter.version>
  </properties>
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.1.RELEASE</version>
  </parent>
  <dependencies>
    <!-- SpringBoot 整合 Web組件 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  	<dependency>
     <groupId>com.alibaba.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <version>${dubbo.starter.version}</version>
   </dependency>
    
    
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <modules>
    	<module>consumers</module>
    	<module>providers</module>
    	<module>common</module>
    </modules>
</project>

說明:這裏跟網上其他的不同,只引入<dubbo.starter.version>0.2.0</dubbo.starter.version>
是因爲依賴中自己引入了zookeeper及其客戶端,所以我沒有額外引入。

1.2 common 模塊

說明:只有一個接口,接口中有一個testRpc 方法

public interface BookService {
	String testRpc(String name);
}

1.3 providers 模塊

1.3.1 pom.xml

 <!--引入common模塊-->
  	<dependency>
  		<groupId>com.zxf</groupId>
  		<artifactId>common</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>

1.3.2 application.properties

server.port=8001
#註冊到註冊中心的名稱
dubbo.application.name=service-providers
#採用協議和端口號
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#註冊中心地址
dubbo.registry.address=zookeeper://localhost:2181
#控制檯彩色輸出
spring.output.ansi.enabled=always

1.3.3 定義BookServiceImpl 實現 BookService

package com.zxf.provider.serviceImpl;

import org.springframework.beans.factory.annotation.Value;
import com.alibaba.dubbo.config.annotation.Service;
import com.zxf.common.service.BookService;

@Service()
public class BookServiceImpl implements BookService {
	
	@Value("${server.port}")
	private String provitePort;

	@Override
	public String testRpc(String name) {
		// TODO Auto-generated method stub
		return "接受到的name=" + name + " 端口號爲=" + provitePort;
	}

}

注意:這裏的@Service是com.alibaba.dubbo.config.annotation.Service;

1.3.4 啓動類

package com.zxf.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo
@SpringBootApplication
public class ProviderApp {
	public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(ProviderApp.class, args);
    }

}

注意:加上@EnableDubbo 它會自動掃描有“@Service”的類,將其暴露爲服務。

服務提供者配置完畢,啓動服務(一定先啓動註冊中心,要不然會報錯,有關zookeeper請自己去查資料),如下所示表明服務提供者已經註冊等到註冊中心:
在這裏插入圖片描述
或者打開dubbo-admin
在這裏插入圖片描述

1.4 consumers 模塊

1.4.1 pom.xml

<!-- 引入common模塊 -->
  	<dependency>
	  	<groupId>com.zxf</groupId>
	    <artifactId>common</artifactId>
	    <version>0.0.1-SNAPSHOT</version>
  	</dependency>

1.4.2 application.properties

#tomcat端口號
server.port=8082
dubbo.application.name=service-consumers
#zookeeper註冊中心的地址
dubbo.registry.address=zookeeper://localhost:2181
dubbo.protocol.name=dubbo
#dubbo默認超時爲1s,有時服務調用會超過默認時間,所以設置超時稍微大一點
dubbo.consumer.timeout=5000
#控制檯彩色輸出
spring.output.ansi.enabled=always

1.4.3 定義 controller

package com.zxf.consumer.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.dubbo.config.annotation.Reference;
import com.zxf.common.service.BookService;

@RestController
public class BookController{

	// dubbo用@Reference 調用服務
    @Reference
    private BookService bookService;
	
    @RequestMapping(value = "testRpc/", method = RequestMethod.GET)
    @ResponseBody
    public String  testRpc(String name){

        return bookService.testRpc(name);
    }

}

注意:dubbo 中 用 @Reference 調用服務

1.4.4 啓動類

package com.zxf.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@EnableDubbo
@SpringBootApplication
public class ConsumerApp{
	public static void main(String[] args) {

	    SpringApplication.run(ConsumerApp.class, args);
    }

}

啓動消費端,再查看dubbo-admin:
在這裏插入圖片描述
如上所示,服務提供者和服務消費者都已註冊到zookeeper。
訪問:http://127.0.0.1:8082/testRpc/?name=20200403,如下所示,服務調用成功:
在這裏插入圖片描述
至此,springBoot2.0+dubbo+zookeeper 實現服務調用完成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章