最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

dubbo服務(wù)調(diào)用者的三種調(diào)用過程

 更新時間:2026年01月16日 08:45:19   作者:辰辰浩  
文章主要介紹了在Dubbo框架中進行服務(wù)調(diào)用的幾種常見方法,包括使用注解、在XML中注冊服務(wù)實例以及泛化調(diào)用

1、使用注解

@Referenc 或 @DubboReference(2.2.7版本以后)

	@Reference
    DubboTestService dubboTestService;
	
/*  @DubboReference
    DubboTestService dubboTestService;*/
	
    @GetMapping(value = "/dubbo/getInfo")
    public Map<String, Object> cachePermissions(String id) {
       return dubboTestService.getInfo(id);
    }
	

2、將服務(wù)實例在 applicationContext.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.lyj.service"></context:component-scan>

    <!-- 消費方應(yīng)用名,用于計算依賴關(guān)系,不是匹配條件,可自定義 -->
    <dubbo:application name="spring-consumer"  />

    <!-- 使用multicast廣播注冊中心暴露發(fā)現(xiàn)服務(wù)地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 監(jiān)控中心監(jiān)控設(shè)置,直連監(jiān)控中心服務(wù)器地址或者從注冊中心發(fā)現(xiàn) -->
    <dubbo:monitor protocol="registry"></dubbo:monitor>
    <!-- <dubbo:monitor address="127.0.0.1:7070"></dubbo:monitor> -->

    <!-- 生成遠程服務(wù)代理,可以和本地bean一樣使用demoService -->
    <dubbo:reference id="dubboTestService" interface="com.dubbo.service.dubboTestService" loadbalance="consistenthash" timeout="30000" />

</beans>

服務(wù)調(diào)用時可通過繼承ApplicationContextAware,獲取spring容器內(nèi)的實例

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * @description: ApplicationContextProvider 通過context獲取目標原型
 **/
@Component
public class ApplicationContextProvider implements ApplicationContextAware {

    /**
     * 上下文對象實例
     */
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

        this.applicationContext = applicationContext;
    }

    /**
     * 通過name獲取 Bean.
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {

        return getApplicationContext().getBean(name);
    }

    /**
     * 通過class獲取Bean.
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {

        return getApplicationContext().getBean(clazz);
    }

}

調(diào)用服務(wù)時只需要

Object bean = ApplicationContextProvider.get(dubboTestService)//值取自<dubbo:reference里注冊的 id
String method = "getInfo";//需要調(diào)用的方法名
Class<?> parameterTypes = Class.forName("java.lang.String");//method的參數(shù)類型的列表(參數(shù)順序需按聲明method時的參數(shù)列表排列),可含有多個,取決于該方法
Method met= bean.getClass().getMethod(method, parameterTypes);
Object resp= met.invoke(bean, id); //resp返回值 id為method方法的參數(shù)

3、泛化 

創(chuàng)建服務(wù)調(diào)用類   借鑒 dubbo-samples

import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.rpc.service.GenericService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class DubboServiceGeneric {

    public static final Logger logger = LoggerFactory.getLogger(DubboServiceGeneric.class);

    @Value("${dubbo.cloud.subscribed-services}")
    public String applicationName;

    @Value("${dubbo.registry.address}")
    public String dubboRegistryAddress;


    public Object invoke(String interfaceName, String version, String metName, String[] paramsClass, Object[] paramsValues) {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName(applicationName);
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress(dubboRegistryAddress);
        ReferenceConfig<GenericService> referenceConfig = new ReferenceConfig<>();
        referenceConfig.setInterface(interfaceName);
        referenceConfig.setVersion(version);
        applicationConfig.setRegistry(registryConfig);
        referenceConfig.setApplication(applicationConfig);
        referenceConfig.setGeneric("true");
        referenceConfig.setAsync(true);
        referenceConfig.setTimeout(7000);

        GenericService genericService = referenceConfig.get();
        Object o = genericService.$invoke(metName, paramsClass, paramsValues);
        return o;
    }
}

調(diào)用時只需要

@Autowired
DubboServiceGeneric dubboServiceGeneric;

String s = "";//s為method方法的參數(shù)
String getInfo = dubboServiceGeneric.invoke("com.dubbo.service.DubboTestService", "1.0.0", "getInfo", s);//1.0.0為版本號 

對應(yīng)的服務(wù)提供者為

import com.dubbo.service.DubboTestService;
import org.apache.dubbo.config.annotation.Service;

@Service(version = "1.0.0")
public class DubboTestServiceImpl implements DubboTestService {


    @Autowired
    GatewayComponentMapper gatewayComponentMapper;

    @Override
    public Map<String, String> getInfo(Object json) {
        List<GatewayComponentDTO> dtos = gatewayComponentMapper.selectList(new QueryWrapper<>());
        HashMap<String, String> map = new HashMap<>();
        map.put("info", JSON.toJSONString(dtos));
        return map;
    }
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java通過value獲取Map中key的三種實現(xiàn)過程

    Java通過value獲取Map中key的三種實現(xiàn)過程

    本文介紹了三種通過Value值獲取Map中的Key值的方法:循環(huán)法、Stream方法和ApacheCommonsCollections的BidiMap,每種方法都有其特點和適用場景,選擇哪種方法應(yīng)根據(jù)具體需求來決定
    2026-01-01
  • SpringBoot防止消息重復消費的方法步驟

    SpringBoot防止消息重復消費的方法步驟

    這段文章詳細介紹了消息隊列中消息重復消費的問題及解決方案,重點講解了Redis唯一ID防重、數(shù)據(jù)庫唯一索引防重、業(yè)務(wù)狀態(tài)機防重和全局唯一約束防重四種方案,適合不同業(yè)務(wù)場景和并發(fā)量的需求,需要的朋友可以參考下
    2026-05-05
  • spring boot 2.x html中引用css和js失效問題及解決方法

    spring boot 2.x html中引用css和js失效問題及解決方法

    這篇文章主要介紹了spring boot 2.x html中引用css和js失效,需要的朋友可以參考下
    2018-11-11
  • Java 生成圖片驗證碼3種方法(字母、加減乘除、中文)

    Java 生成圖片驗證碼3種方法(字母、加減乘除、中文)

    這篇文章主要介紹了Java 生成圖片驗證碼3種方法(字母、加減乘除、中文),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • SpringCloud Eureka的使用教程

    SpringCloud Eureka的使用教程

    這篇文章主要給大家介紹了關(guān)于SpringCloud Eureka使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 微信公眾號支付(一)如何獲取用戶openId

    微信公眾號支付(一)如何獲取用戶openId

    本篇文章給大家介紹微信公眾號支付如何獲取用戶openid,需要授權(quán)回調(diào)頁面域名等一系列途徑實現(xiàn)此功能,需要的朋友可以參考下
    2015-09-09
  • Nacos集群模式下服務(wù)無法注冊問題

    Nacos集群模式下服務(wù)無法注冊問題

    這篇文章主要介紹了Nacos集群模式下服務(wù)無法注冊問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 圖解Java經(jīng)典算法插入排序的原理與實現(xiàn)

    圖解Java經(jīng)典算法插入排序的原理與實現(xiàn)

    插入排序的算法描述是一種簡單直觀的排序算法。其原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。本文將用Java語言實現(xiàn)插入排序算法并進行可視化,感興趣的可以了解一下
    2022-09-09
  • 解決Java中基于GeoTools的Shapefile讀取亂碼的問題

    解決Java中基于GeoTools的Shapefile讀取亂碼的問題

    本文主要討論了在使用Java編程語言進行地理信息數(shù)據(jù)解析時遇到的Shapefile屬性信息亂碼問題,以及根據(jù)不同的編碼設(shè)置進行屬性信息解析的方法,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • 使用import導入靜態(tài)成員的方法

    使用import導入靜態(tài)成員的方法

    這篇文章主要介紹了淺談使用import導入靜態(tài)成員,需要的朋友可以參考下。
    2017-09-09

最新評論

手机| 巴林左旗| 东兴市| 江孜县| 桦甸市| 东乡县| 礼泉县| 诸暨市| 浦县| 晋宁县| 泰来县| 封丘县| 盐源县| 垫江县| 荥经县| 紫阳县| 黄骅市| 股票| 乌鲁木齐县| 阿克陶县| 维西| 印江| 吴堡县| 宾阳县| 延吉市| 余姚市| 宽城| 荆门市| 汉沽区| 红河县| 仙桃市| 湾仔区| 启东市| 桂东县| 兰西县| 彝良县| 乳山市| 长子县| 沭阳县| 布拖县| 泽普县|