溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker下怎么實(shí)現(xiàn)java開發(fā)

發(fā)布時(shí)間:2021-12-13 14:39:12 來(lái)源:億速云 閱讀:141 作者:iii 欄目:云計(jì)算

本篇內(nèi)容主要講解“Docker下怎么實(shí)現(xiàn)java開發(fā)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Docker下怎么實(shí)現(xiàn)java開發(fā)”吧!

  1. 服務(wù)提供者的代碼在目錄dubbo_service_provider下,如下圖紅框所示:

Docker下怎么實(shí)現(xiàn)java開發(fā)

  1. 服務(wù)消費(fèi)者的代碼在目錄dubbo_service_consumer下,如下圖紅框所示:

Docker下怎么實(shí)現(xiàn)java開發(fā)

接下來(lái)我們逐個(gè)分析,實(shí)戰(zhàn)開發(fā);

##服務(wù)提供者開發(fā)## 首先是pom中的依賴關(guān)系,除了常用的spring相關(guān)的,我們還要加入dubbo和zookeeper的依賴,如下所示:

<!-- dubbo -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.5.3</version>
      <exclusions>
        <exclusion>
          <artifactId>spring</artifactId>
          <groupId>org.springframework</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- zkclient  -->
    <dependency>
      <groupId>com.github.sgroschupf</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.1</version>
    </dependency>
    <!--  zookeeper -->
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.3.6</version>
    </dependency>

接下來(lái)看代碼,本次實(shí)戰(zhàn)提供了兩個(gè)服務(wù),分別實(shí)現(xiàn)了一下兩個(gè)接口:

  1. CalculateService定義add方法,執(zhí)行最基礎(chǔ)的int型加法服務(wù),實(shí)現(xiàn)如下:

public class CalculateServiceImpl implements CalculateService{

    @Override
    public int add(int a, int b) {
        return a + b;
    }
}
  1. PlatformService定義getRpcFrom方法,返回當(dāng)前環(huán)境系統(tǒng)中的換變量TOMCAT_SERVER_ID的值,這個(gè)值是docker容器啟動(dòng)的時(shí)候從docker-compose.yml中傳入的;

public class PlatformServiceImpl implements PlatformService {

    @Override
    public String getRpcFrom() {
        return System.getenv().get("TOMCAT_SERVER_ID");
    }
}

以上是兩個(gè)演示用的服務(wù)實(shí)現(xiàn),邏輯很簡(jiǎn)單,現(xiàn)在看如何將服務(wù)發(fā)布到dubbo環(huán)境:

spring-extends.xml是我們自定義的spring配置文件,想發(fā)布到dubbo環(huán)境的服務(wù)都在這里聲明:

<dubbo:application name="dubbo_service_provider" />
	<!-- 本機(jī) 偽集群 測(cè)試 -->
	<!--
    <dubbo:registry  protocol="zookeeper"  address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183"  />
    -->
	<dubbo:registry address="zookeeper://zkhost:2181" />
	<dubbo:protocol name="dubbo" port="20880" />
	<dubbo:service interface="com.bolingcavalry.service.CalculateService"
				   ref="calculateService" />
	<dubbo:service interface="com.bolingcavalry.service.PlatformService"
				   ref="platformService" />
	<!-- 和本地bean一樣實(shí)現(xiàn)服務(wù) -->
	<bean id="calculateService" class="com.bolingcavalry.service.impl.CalculateServiceImpl" />
	<bean id="platformService" class="com.bolingcavalry.service.impl.PlatformServiceImpl" />

dubbo:application定義了服務(wù)歸屬的應(yīng)用為dubbo_service_provider; dubbo:registry定義了注冊(cè)中心地址,本次實(shí)戰(zhàn)的zookeeper配置為單機(jī),所以只填寫了一個(gè)地址"zookeeper://zkhost:2181",其中zkhost是docker容器的link屬性的別名(連接到zookeeper容器),在dubbo:registry配置的上面有一個(gè)被注釋掉的dubbo:registry配置,里面是zookeeper集群時(shí)候的連接方式; dubbo:protocol定義采用dubbo協(xié)議,使用20880端口; dubbo:service配置了要發(fā)布的服務(wù),指定服務(wù)接口以及對(duì)應(yīng)的bean;

使用以上配置,在spring環(huán)境啟動(dòng)后注冊(cè)中心就會(huì)感知到,在pom.xml文件所在目錄下執(zhí)行<font color="blue">mvn clean package -Dmaven.test.skip=true </font>即可編譯打包,在docker容器發(fā)布運(yùn)行方式請(qǐng)參照《Docker下dubbo開發(fā),三部曲之二:本地環(huán)境搭建》;

##服務(wù)消費(fèi)者開發(fā)## 服務(wù)消費(fèi)者工程是dubbo_service_consumer,pom中的依賴關(guān)系和服務(wù)提供者的一樣的,由于要調(diào)用dubbo_service_provider提供的服務(wù),所以要把CalculateService和PlatformService這兩個(gè)接口引入到工程中,一般是通過(guò)jar包方式引入,這里圖個(gè)方便,直接將兩個(gè)接口的源碼復(fù)制到工程中,如下圖:

Docker下怎么實(shí)現(xiàn)java開發(fā)

再來(lái)看看調(diào)用服務(wù)的代碼,如下圖所示,通過(guò)普通的Autowired就能直接使用了,就像普通的spring環(huán)境中使用服務(wù)一樣簡(jiǎn)單:

[外鏈圖片轉(zhuǎn)存中...(img-uShHNkJu-1568769121752)]

從dubbo環(huán)境獲取遠(yuǎn)程服務(wù)的能力,是通過(guò)以下spring配置來(lái)實(shí)現(xiàn)的:

<!-- 消費(fèi)方應(yīng)用名,用于計(jì)算依賴關(guān)系,不是匹配條件,不要與提供方一樣 -->
	<dubbo:application name="dubbo_service_consumer" />
	<!-- 使用multicast廣播注冊(cè)中心暴露發(fā)現(xiàn)服務(wù)地址 -->
	<!--
	<dubbo:registry  protocol="zookeeper"  address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183" />
	-->
	<dubbo:registry address="zookeeper://172.28.0.3:2181" />
	<!-- 生成遠(yuǎn)程服務(wù)代理,可以和本地bean一樣使用demoService -->
	<dubbo:reference id="calculateService" interface="com.bolingcavalry.service.CalculateService" />
	<dubbo:reference id="platformService" interface="com.bolingcavalry.service.PlatformService" />

dubbo:application和dubbo:registry的作用和前面分析的服務(wù)提供者的一樣,dubbo:reference是指從dubbo環(huán)境獲得遠(yuǎn)程的服務(wù),interface指定了服務(wù)類型,應(yīng)用啟動(dòng)后,用到服務(wù)端的時(shí)候就會(huì)根據(jù)注冊(cè)中心的信息,遠(yuǎn)程調(diào)用服務(wù)提供者的服務(wù);

到此,相信大家對(duì)“Docker下怎么實(shí)現(xiàn)java開發(fā)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI