# 8 快速入門 dubbo

word發表於2022-07-18

8 快速入門 dubbo

所需資料

註冊中心 Zookeeper

安裝 zookeeper

  • 官方推薦使用 zookeeper 註冊中心;
  • 註冊中心負責服務地址的註冊與查詢,相當於目錄服務;
  • 服務提供者和消費者只在啟動時與註冊中心互動,註冊中不轉發請求,壓力較小;
  • Zookeeper 是 apache hadoop 的子專案,是一個樹形的目錄服務,支援變更推送,適合作為
    dubbo 的服務註冊中心,工業強度較高,可用於生產環境;

入門 demo 的架構

img

注意

如果在貼上這些web.xml 或者pom.xml裡面build裡面的標籤傳送這樣的報錯提示,注意哦 這可能不是錯誤,不會影響到我們專案的執行。

img

服務提供者

1、一個空的maven專案
2、提供一個服務介面即可

專案目錄結構

圖中紅框的需要我們建立

img

提供方的pom.xml

各種依賴請嚴格按照下面的版本

  • 記得要更新pom檔案哦!
  • 當dependencies中出現依賴的版本資訊 說明依賴引入成功了
  • img
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>5.0.6.RELEASE</spring.version>
    </properties>

    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.11.0.GA</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <port>8001</port>
                    <path>/</path>
                </configuration>
                <executions>
                    <execution>
                        <!-- 打包完成後,執行服務 -->
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

提供方介面
public interface HelloService {
    String sayHello(String name);
}
暴露的提供方實現

@Service 這個註解不是spring的哦

@com.alibaba.dubbo.config.annotation.Service
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String name) {
        return "Hello," + name + "!!!";
    }
}
服務提供方的配置檔案spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--1.服務提供方在zookeeper中的“別名”-->
    <dubbo:application name="dubbo-server"/>
    <!--2.註冊中心的地址-->
    <dubbo:registry address="zookeeper://192.168.77.132:2181"/>
    <!-- 讓監控 去註冊中心 自動找服務 -->
    <dubbo:monitor protocol="registry"/>
    <!--3.掃描類(將什麼包下的類作為服務提供類)-->
    <dubbo:annotation package="service.impl"/>
</beans>
提供方的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         id="WebApp_ID" version="3.1">
<!--使用上下文監聽器-初始化專案環境-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring.xml</param-value>
    </context-param>
</web-app>

服務消費方

專案目錄結構

img

消費方的pom.xml

與服務方一致,只需要修改tomcat的埠為8002

消費方的Controller

因為我們是通過瀏覽器去訪問的,所以要建立controller層,提供對外訪問的介面

@RestController
public class HelloAction {
    @com.alibaba.dubbo.config.annotation.Reference
    private HelloService hs;

    @RequestMapping("hello/{name}")
    @ResponseBody
    public String hello(@PathVariable String name) {
        return hs.sayHello(name);
    }
}
消費方的介面

注意:

  • controller中要依賴HelloService,所以我們建立一個介面;
  • 這裡是消費方,不需要實現,因為實現會讓服務方為我們搞定!跟8001服務提供方的執行緒遠端通訊
public interface HelloService {
    String sayHello(String name);
}
消費方的springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!--Dubbo的應用名稱,通常使用專案名 -->
    <dubbo:application name="dubbo-consumer"/>
    <!--配置Dubbo的註冊中心地址 -->
    <dubbo:registry address="zookeeper://192.168.77.132:2181"/>
    <!-- 讓監控 去註冊中心 自動找服務 -->
    <dubbo:monitor protocol="registry"/>
    <!--配置Dubbo掃描類,將這個類作為服務進行釋出 -->
    <dubbo:annotation package="controller"/>
</beans>
消費方的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         id="WebApp_ID" version="3.1">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

啟動測試

還是跟是實現zookeeper實現分散式鎖一樣啟動哦

  • 我們在這裡配置了打包之後直接執行
  • 所以我們執行打包命令即可,如果出錯,先執行clean在執行package

img

如果執行出錯,或者訪問失敗可以去查詢以下問題

  • @service註解是否是dubbo的
  • linux伺服器的防火牆是否關閉
  • zookeeper的註冊地址是否有誤 linux檢視本機ip 【ip address】
  • 如果想看到自己的服務,可以先搭建dubbo的視覺化工具,文章地址

當出現埠地址 且上面沒有報錯資訊時,說明啟動成功

img

可以看到我們的請求成功了

img

相關文章