国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Redisson】Redisson--分布式遠程服務(Remote Service)

這篇具有很好參考價值的文章主要介紹了【Redisson】Redisson--分布式遠程服務(Remote Service)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Redisson系列文章:

  • 【Redisson】Redisson–基礎入門
  • 【Redisson】Redisson–布隆(Bloom Filter)過濾器
  • 【Redisson】Redisson–分布式鎖的使用(推薦使用)
  • 【分布式鎖】Redisson分布式鎖底層原理
  • 【Redisson】Redisson–限流器

一、Redisson使用遠程服務

當前有兩臺服務器連接的是同一個Redisson中間件,這兩臺服務器叫它們A節(jié)點與B節(jié)點吧。A節(jié)點可以發(fā)布一些API接口,也實現(xiàn)了它們,并向Redisson服務中心注冊。B節(jié)點向Redisson注冊中心訂閱這些API接口,因此它可以向Redisson服務器發(fā)送這些請求,這些請求最終會被注冊中心轉(zhuǎn)發(fā)到A節(jié)點。這樣,B節(jié)點就能夠通過Redisson注冊中心與A節(jié)點通信,從而實現(xiàn)遠程服務調(diào)用功能。

分布式遠程服務(Remote Service)提供了兩種類型的RRemoteService實例:

服務端(遠端)實例 - 用來執(zhí)行遠程方法(工作者實例即worker instance). 例如

RRemoteService remoteService = redisson.getRemoteService();
SomeServiceImpl someServiceImpl = new SomeServiceImpl();
 
// 在調(diào)用遠程方法以前,應該首先注冊遠程服務
// 只注冊了一個服務端工作者實例,只能同時執(zhí)行一個并發(fā)調(diào)用
remoteService.register(SomeServiceInterface.class, someServiceImpl);
 
// 注冊了12個服務端工作者實例,可以同時執(zhí)行12個并發(fā)調(diào)用
remoteService.register(SomeServiceInterface.class, someServiceImpl, 12);

客戶端(本地)實例 - 用來請求遠程方法. 例如:

RRemoteService remoteService = redisson.getRemoteService();
SomeServiceInterface service = remoteService.get(SomeServiceInterface.class);
 
String result = service.doSomeStuff(1L, "secondParam", new AnyParam());

二、服務端(生產(chǎn)端)實戰(zhàn)

  1. 首先服務器端會定義一個接口IMailService,并實現(xiàn)它IMailServiceImpl。這里注意的是,IMailService與MailDto都是在API模塊里面的,方便打包并發(fā)布。MailDto需要實現(xiàn)序列化接口,因為需要存放在Redis中并
public interface IMailService {
 
    MailDto queryMail(Long id);
}
 
@Service
public class IMailServiceImpl implements IMailService {
 
    @Autowired
    private MailMapper mailMapper;
 
    @Override
    public MailDto queryMail(Long id) {
        Mail mail = mailMapper.selectByPrimaryKey(id);
        MailDto dto = new MailDto();
        if (mail != null) {
            BeanUtils.copyProperties(mail, dto);
        }
        return dto;
    }
}
  1. 向Redisson注冊中心發(fā)布API。CommandLineRunner接口的功能是在SpringBoot項目啟動的時候執(zhí)行相關的功能。
@Component
public class RemoteServiceInit implements CommandLineRunner {
    private static final Logger LOGGER = 
                           LoggerFactory.getLogger(RemoteServiceInit.class);
 
    @Autowired
    private RedissonClient redisson;
 
    @Autowired
    private IMailService iMailService;
 
    @Override
    public void run(String... strings) throws Exception {
        LOGGER.info("初始化Redisson遠程調(diào)度");
        RRemoteService remoteService = redisson.getRemoteService();
        //初始化5個并發(fā)實例
        remoteService.register(IMailService.class, iMailService, 5);
    }
}

三、客戶端(消費端)實戰(zhàn)

生產(chǎn)端的IMailService與MailDto最好定義在API模塊,方便打包發(fā)布。打包成jar以后,導入到消費端項目B中。消費端項目B需要與生產(chǎn)端連接相同的Redisson服務器。

@Service
public class RemoteMailService {
 
    @Autowired
    private RedissonClient redisson;
 
    public MailDto queryMail(Long id) {
        //獲取Redisson遠程服務
        RRemoteService remoteService = redisson.getRemoteService();
        //應答回執(zhí)超時1秒鐘,遠程執(zhí)行超時30秒鐘
        RemoteInvocationOptions options = RemoteInvocationOptions.defaults();
        //拿到生產(chǎn)端的接口
        IMailService iMailService = remoteService.get(IMailService.class,options);
        //調(diào)用
        return iMailService.queryMail(id);
    }
}

【Redisson】Redisson--分布式遠程服務(Remote Service),# Redis,分布式,redis

Redisson遠程服務

四、響應模式附錄

涉及到網(wǎng)絡傳輸,所以可能有傳輸失敗的情況。更多的應答模式如下。

noResult()是指遠程調(diào)用的方法,不需要有返回值。noAck()表示消費端不需要要服務端響應。

// 應答回執(zhí)超時1秒鐘,遠程執(zhí)行超時30秒鐘
RemoteInvocationOptions options = RemoteInvocationOptions.defaults();
 
// 無需應答回執(zhí),遠程執(zhí)行超時30秒鐘
RemoteInvocationOptions options = RemoteInvocationOptions.defaults().noAck();
 
// 應答回執(zhí)超時1秒鐘,不等待執(zhí)行結(jié)果
RemoteInvocationOptions options = RemoteInvocationOptions.defaults().noResult();
 
// 應答回執(zhí)超時1分鐘,不等待執(zhí)行結(jié)果
RemoteInvocationOptions options = RemoteInvocationOptions.defaults().
                                        expectAckWithin(1, TimeUnit.MINUTES).noResult();
 
// 發(fā)送即不管(Fire-and-Forget)模式,無需應答回執(zhí),不等待結(jié)果
RemoteInvocationOptions options = RemoteInvocationOptions.defaults().noAck().noResult();
 
RRemoteService remoteService = redisson.getRemoteService();
YourService service = remoteService.get(YourService.class, options);

下面的這段代碼是我自己實測的。

expectResultWithin(15,TimeUnit.SECONDS)表示,如果生產(chǎn)端服務器能夠接通的話,在15秒之內(nèi)需要返回數(shù)據(jù),否則報異常No response after 15000ms for request。

expectAckWithin(10,TimeUnit.SECONDS)表示,生產(chǎn)端服務器需要在10秒內(nèi)有響應,否則報異常No ACK response after 10000ms for request。文章來源地址http://www.zghlxwxcb.cn/news/detail-535504.html

  public MailDto queryMail(Long id) {
 
        RRemoteService remoteService = redisson.getRemoteService();
        //應答回執(zhí)超過5秒鐘,不等待執(zhí)行結(jié)果
        RemoteInvocationOptions options = RemoteInvocationOptions.defaults().
                expectResultWithin(15, TimeUnit.SECONDS).expectAckWithin(10,TimeUnit.SECONDS);
        Long start = System.currentTimeMillis();
        IMailService iMailService = remoteService.get(IMailService.class,options);
        MailDto result = null;
        try {
             result =  iMailService.queryMail(id);
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        Long end = System.currentTimeMillis();
        System.out.println(end - start);
        return result;
    }

到了這里,關于【Redisson】Redisson--分布式遠程服務(Remote Service)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【業(yè)務功能100】補充代碼【業(yè)務功能88】微服務-springcloud-分布式鎖-redis-redisson-springcache

    采用redisson做分布式鎖,完成數(shù)據(jù)的查詢接口功能getCatelog2JSONRedis 原先從mysql數(shù)據(jù)庫查詢的效率較低,現(xiàn)在將部分固定數(shù)據(jù)展示比如頁面的樹形欄目信息等,存儲到 redis緩存 ,然后基于分布式集群,需要結(jié)合本地鎖(synchronized )與分布式鎖(redissonClient.getLock(“catelog2JSON-lock”

    2024年02月09日
    瀏覽(26)
  • 【Redisson】Redisson--分布式中幾種鎖

    Redisson系列文章: 【Redisson】Redisson–基礎入門 【Redisson】Redisson–布隆(Bloom Filter)過濾器 【Redisson】Redisson–分布式鎖的使用(推薦使用) 【分布式鎖】Redisson分布式鎖底層原理 【Redisson】Redisson–限流器、 【Redisson】Redisson–分布式遠程服務(Remote Service) 【Redisson】Redisson–

    2024年02月13日
    瀏覽(22)
  • Redisson—分布式對象

    每個Redisson對象實例都會有一個與之對應的Redis數(shù)據(jù)實例,可以通過調(diào)用getName方法來取得Redis數(shù)據(jù)實例的名稱(key)。 所有與Redis key相關的操作都歸納在RKeys這個接口里: Redisson的分布式RBucketJava對象是一種通用對象桶可以用來存放任類型的對象。 除了同步接口外,還提供了異

    2024年02月07日
    瀏覽(20)
  • Redisson 分布式鎖

    Redisson 分布式鎖

    Redis是基礎客戶端庫,可用于執(zhí)行基本操作。 Redisson是基于Redis的Java客戶端,提供高級功能如分布式鎖、分布式集合和分布式對象。 Redisson提供更友好的API,支持異步和響應式編程,提供內(nèi)置線程安全和失敗重試機制。 實現(xiàn)步驟: 通過導入坐標和配置,注入RedissonClient對象之

    2024年02月11日
    瀏覽(29)
  • Redisson分布式鎖

    Redisson分布式鎖

    Redisson是一個在Redis的基礎上實現(xiàn)的Java駐內(nèi)存數(shù)據(jù)網(wǎng)格,可參考Redisson官方文檔使用,它不僅提供了一系列的分布式的Java常用對象,還提供了許多分布式服務。 簡單來說,就是直接 RLock rlock = redissonClient.getLock(“l(fā)ock”); 獲取到鎖,然后lock()和unlock()即可。 并發(fā)達到了660,比之

    2024年02月16日
    瀏覽(21)
  • 運用分布式鎖 redisson

    導入依賴 根據(jù)springboot版本不同自行選擇版本 dependency groupIdorg.redisson/groupId artifactIdredisson-spring-boot-starter/artifactId version3.15.3/version /dependency 創(chuàng)建客戶端

    2024年01月19日
    瀏覽(23)
  • SpringBoot+Redisson分布式鎖

    org.redisson.config.Config類是Redisson框架中用于配置Redisson客戶端的類。以下是一些常用的配置項: codec(編碼) :默認值是org.redisson.codec.JsonJacksonCodec,用于定義與Redis交互時使用的編解碼器。 useSingleServer :設置為true時,將使用單節(jié)點模式進行連接。 useMasterSlave :設置為true時,

    2024年01月19日
    瀏覽(25)
  • Redisson實現(xiàn)分布式鎖示例

    Redisson實現(xiàn)分布式鎖示例

    可以下載redis desktop manager軟件來查看redis里面存放的東西 紅色框內(nèi)的TTL值就是過期時間,默認-1,表示永不過期,指定過期時間后就變成你指定的值了。 上面的方法,我們讓線程睡眠60S,代表我們的業(yè)務執(zhí)行時間,在調(diào)用這個方法時,我們可以在 redis desktop manager軟件上實時查

    2024年02月12日
    瀏覽(22)
  • Redisson分布式鎖 原理&源碼 分析

    Redisson分布式鎖 原理&源碼 分析

    獲取鎖的Lua腳本: 釋放鎖的Lua腳本: tryLock()底層代碼分析 time :剩余的等待重試時間 ttl :現(xiàn)被持有的鎖的剩余有效時間 計算嘗試獲取鎖所消耗的時間,然后再計算出等待獲取鎖的剩余時間time, 如果time=0,則不再重試了直接返回獲取鎖失敗, 如果time0,則通過subscribe去

    2024年02月11日
    瀏覽(22)
  • Redis實戰(zhàn)——Redisson分布式鎖

    Redis實戰(zhàn)——Redisson分布式鎖

    目錄 1 基于Redis中setnx方法的分布式鎖的問題 2 Redisson ????????2.1 什么是Redisson ????????2.2 Redisson實現(xiàn)分布式鎖快速入門 ????????2.3 Redisson 可重入鎖原理 ????????????????什么是可重入鎖? ????????????????Redisson中又是如何實現(xiàn)的呢? ????????2

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包