日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Dubbo入门(一)

發布時間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dubbo入门(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、Dubbo核心概念

1.簡介

2.基本概念

3.Dubbo環境搭建(windows)

(1)安裝zookeeper

(2)安裝dubbo-admin管理控制臺

二、快速入門

gmail-interface模塊

user-service-provider模塊

user-service-consumer模塊

一、Dubbo核心概念

1.簡介

  • Apache Dubbo (incubating) 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。

2.基本概念

  • 服務提供者(Provider):暴露服務的服務提供方,服務提供者在啟動時,向注冊中心注冊自己提供的服務。

  • 服務消費者(Consumer): 調用遠程服務的服務消費方,服務消費者在啟動時,向注冊中心訂閱自己所需的服務,服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。

  • 注冊中心(Registry):注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者

  • 監控中心(Monitor):服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心

  • 調用關系說明

    • 服務容器負責啟動,加載,運行服務提供者

    • 服務提供者在啟動時,向注冊中心注冊自己提供的服務

    • 服務消費者在啟動時,向注冊中心訂閱自己所需的服務

    • 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者

    • 服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用

    • 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心

3.Dubbo環境搭建(windows)

(1)安裝zookeeper

1)下載zookeeper

https://archive.apache.org/dist/zookeeper/

2)解壓zookeeper

解壓運行zkServer.cmd ,初次運行會報錯,沒有zoo.cfg配置文件

3)修改zoo.cfg配置文件

將conf下的zoo_sample.cfg復制一份改名為zoo.cfg即可。

注意幾個重要位置:

dataDir=./ 臨時數據存儲的目錄(可寫相對路徑)

clientPort=2181 zookeeper的端口號

修改完成后再次啟動zookeeper

4)使用zkCli.cmd測試

ls /:列出zookeeper根下保存的所有節點

create –e /yfy 123:創建一個yfy節點,值為123

get /yfy:獲取/yfy節點的值

(2)安裝dubbo-admin管理控制臺

dubbo本身并不是一個服務軟件。它其實就是一個jar包能夠幫你的java程序連接到zookeeper,并利用zookeeper消費、提供服務。所以你不用在Linux上啟動什么dubbo服務。

但是為了讓用戶更好的管理監控眾多的dubbo服務,官方提供了一個可視化的監控程序,不過這個監控即使不裝也不影響使用。

1)下載dubbo-admin

https://github.com/apache/incubator-dubbo-ops

2)進入目錄,修改dubbo-admin配置

修改 src\main\resources\application.properties 指定zookeeper地址

3)打包dubbo-admin

mvn clean package -Dmaven.test.skip=true

4)運行dubbo-admin

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

注:默認使用root/root 登陸

二、快速入門

gmail-interface模塊

UserAddress.java

public class UserAddress implements Serializable {private Integer id;private String userAddress; //用戶地址private String userId; //用戶idprivate String consignee; //收貨人private String phoneNum; //電話號碼private String isDefault; //是否為默認地址 ? Y-是 ? ? N-否 }

UserService.java

public interface UserService {/*** 按照用戶id返回所有的收貨地址* @param userId* @return*/public List<UserAddress> getUserAddressList(String userId); }

user-service-provider模塊

UserService.java

import com.alibaba.dubbo.config.annotation.Service; ? //必須為alibaba的@Service @Service public class UserServiceImpl implements UserService { ?@Overridepublic List<UserAddress> getUserAddressList(String userId) {UserAddress address1 = new UserAddress(1, "北京朝陽", "1", "李老師", "10086", "Y");UserAddress address2 = new UserAddress(2, "山西太原)", "1", "王老師", "100000", "N");return Arrays.asList(address1, address2);} ? }

provider.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://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans ? ? ? http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ? ? ? http://dubbo.apache.org/schema/dubbo ? ? ? http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> ?<!-- 指定當前服務/應用的名字 --><dubbo:application name="user-service-provider" ?/> ?<!-- 指定注冊中心的位置 --><dubbo:registry address="zookeeper://127.0.0.1:2181" /> ?<!-- 用dubbo協議在20880端口暴露服務 --><dubbo:protocol name="dubbo" port="20880" /> ?<!-- 聲明需要暴露的服務接口 --><dubbo:annotation package="com.itheima.gmall.service.impl"></dubbo:annotation> </beans>

pom.xml

? ?<dependencies><dependency><groupId>com.itheima</groupId><artifactId>gmail-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- 引入dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!-- 注冊中心使用的是zookeeper --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency></dependencies>

MainApplication.java

public class MainApplication {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"});context.start();System.in.read(); // 按任意鍵退出} }

user-service-consumer模塊

OrderService.java

import com.alibaba.dubbo.config.annotation.Reference; ? @Service public class OrderServiceImpl implements OrderService { ?//使用dubbo提供的reference注解引用遠程服務@Referenceprivate UserService userService; ?@Overridepublic void initOrder(String userId) {List<UserAddress> addressList = userService.getUserAddressList("1");for (UserAddress userAddress : addressList) {System.out.println(userAddress);}} }

consumer.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://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans ? ? ? http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ? ? ? http://dubbo.apache.org/schema/dubbo ? ? ? http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> ?<context:component-scan base-package="com.itheima.gmall.service.impl"/> ?<!-- 消費方應用名,用于計算依賴關系,不是匹配條件,不要與提供方一樣 --><dubbo:application name="order-service-consumer"/> ?<!-- 指定注冊中心的位置 --><dubbo:registry address="zookeeper://127.0.0.1:2181" /> ?<dubbo:annotation package="com.itheima.gmall.service"></dubbo:annotation> ? </beans>

pom.xml

<dependencies><dependency><groupId>com.itheima</groupId><artifactId>gmail-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- 引入dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!-- 注冊中心使用的是zookeeper --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency></dependencies>

MainApplication.java

public class MainApplication { ?public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");context.start();OrderService orderService =context.getBean(OrderService.class); // 獲取遠程服務代理orderService.initOrder("1"); // 執行遠程方法System.out.println("調用完成");System.in.read();} } ?
  • 開啟zookeeeper,啟動user-service-provider模塊的MainApplication.java,然后啟動user-service-consumer模塊的MainApplication.java,可以調用成功。

總結

以上是生活随笔為你收集整理的Dubbo入门(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。