Java开发 - 带你了解集群间的相互调用,你还在等什么?

集群间实现Session共享 一、引言针对企业,为了应对庞大的用户访问压力,目前大多数大型网站服务器都采用分布式服务集群部署的方式;针对个人,仅一台服务器而言,也会安装多个tomcat进行错时更新,保证更新后台业务时服务不断开,即模拟了分布式集群的运行方式。在此分布式集群中,我们就不得不考虑一个用户鉴权的问题,即在不同服务上如何保证用户均已登录,并能获取相同的用户登录信息。二、Java Web推荐的(公认的)用户鉴权机制说此部分 阅读详情

目录

前言

导读

项目准备

集群准备

父工程引入子项目

服务调用方HelloService准备

pom文件

yml文件

Controller文件

服务提供方HelloWorld准备 

pom文件

yml文件

Controller文件 

运行此两个工程 

hello_world组集群

集群调用测试

RestTemplate换成Dubbo行不行,怎么换

两个pom文件引入依赖

 两个启动文件添加新注解

结构调整

helloWorld调整

helloService调整

​编辑

重新运行

权重 

结语


前言

前文中,对Redis的集群做了详细的讲解,能一路读到这里的相信你们对集群的概念已经基本了解,今天博主要带给大家的是集群之间的相互调用,同时还带负载均衡,这也是目前比较流行的集群使用方法,可以有效避免故障时对整个系统造成影响。既然有集群,那一定少不了RPC的使用,没错,这里会简单涉及,后续会单独讲解更详细的使用,下面,就让我们一起来学习这篇集群之间的相互调用吧。

导读

本篇的重点不在于讲RPC,而是单纯的一种集群调用思想和调用结构!!!

在开始学习前,不知道你对Nacos了解多少?本文主要依靠的便是Nacos注册中心,如果不还不太了解,下面这篇博客将带你初步了解:

Java开发 - 配置中心初体验

项目准备

在开始讲解之前,我们需要先准备一个基础项目其结构大概如下:

你不必像创建过多子项目,圈起来的俩红色的是博主创建的,service是业务调用方,helloworld是业务提供方,好吧,world还写错了,请不要嘲笑博主,手滑,真的是手滑。

关于微服务项目基本结构不知道大家了解多少,如果你对微服务项目里父子项目的基本结构不了解的话,那么建议你先去了解下面下,博主给大家准备好了,点下面链接:

Java开发 - 数风流人物,还看“微服务”

赶紧去看,趁博主还没收费哦~

不选择在这里给大家讲解是因为篇幅过长,不利于大家学习,学习应该是一个循序渐进的过程,而不是一蹴而就。

下面就是一个集群的异地容灾结构图,大家看看:

集群准备

上面主要是让大家熟悉微服务父子项目的配置,这里也会涉及点,但基本上是一笔带过,若果你了解父子项目结构,那么请继续。

父工程引入子项目

详细的结构大家还是要通过上面那篇去学习,这里不再赘述。

服务调用方HelloService准备

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.codingfire</groupId>
        <artifactId>cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.codingfire</groupId>
    <artifactId>HelloService</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>HelloService</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.codingfire</groupId>
            <artifactId>Cloud-helloword</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

yml文件

spring:
  application:
    # 当前Springboot项目的名称,用于注册中心服务的名称
    name: hello_service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        cluster-name: HZ # 集群名称

hello_world:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

其中,hello_world是我们要调用的业务的名字,在对方的pom文件中。下面有负载均衡策略,是随机的。

Controller文件

我们简单搞个Controller,用来调用hello_world服务:

package com.codingfire.helloservice.controller;

import com.codingfire.cloud.helloword.controller.HHelloController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/hello")
public class SHelloController {

    @Autowired
    private RestTemplate restTemplate;


    @GetMapping("/service")
    public String hello(){
        //hello_world也可以用ip:port替代,但你要集群调用,就不能写死,要写对方的集群的服务名
        String helloWorld = "http://hello_world/hello/world";

        return "XiaoMing says:" + helloWorld;
    }

}

此处我们先用最简单的RestTemplate来进行RPC,此处肯定报错,还需要在启动类中添加此方法:

package com.codingfire.helloservice.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

到此,服务调用方的准备就已经就绪。

服务提供方HelloWorld准备 

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.codingfire</groupId>
        <artifactId>cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.codingfire</groupId>
    <artifactId>Cloud-helloword</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Cloud-helloword</name>
    <description>Demo project for Spring Boot</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

yml文件

spring:
  application:
    # 当前Springboot项目的名称,用于注册中心服务的名称
    name: hello_world
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        cluster-name: SH # 集群名称

Controller文件 

package com.codingfire.cloud.helloword.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HHelloController {

    @GetMapping("/world")
    public String hello(){
        return "Hello World!";
    }

}

到此,服务提供方准备就绪。

运行此两个工程 

在此之前,请大家确保Nacos已经启动,否则无法运行项目!!!

由于本地运行项目时,没有指定端口,所以tomcat端口8080会冲突,我们给hello_world指定版本号8081:

接下来分别运行这两个项目,并在Nacos后台查看:

此时看到两个服务都已经成功注册进来,但我们要做的是调用集群服务,所以还需要给hello_world增加一个服务,组成集群。

hello_world组集群

请大家点击此处:

在下图中复制多个启动文件出来:

并分别指定端口为8082,8083,8084。

下面我们先运行8082:

在运行8083和8084之前,我们需要把yml文件中的集群名HZ,改为SH,已经运行的项目不要暂停,本地模拟需要,生产环境多台服务器的时候不需要这样。

接着分别运行8083和8084的启动文件,然后去Nacos后台刷新查看:

此时hello_world的集群有两个,实例有四个,符合我们的预期,我们点击“详情”按钮查看:

完美。

集群调用测试

下面我们调用接口:http://localhost:8080/hello/service

它会去调用hello_world里面的接口,最终会显示出来一段话,额,你们有没有报500错误?控制台提示下面这段话:

Request URI does not contain a valid hostname: http://hello_world/hello/world 

如果有的话,恭喜你中奖了,这里要插入一个小小的知识点,spring.application.name中不能带下划线,博主的命名是不是都带了下划线?这是一个非常小的错误,但也是一个非常容易被忽略的错误,问题是你压根不知道发生了什么,所以,大家现在回过头,去yml文件里,把名字改了,改成:helloWorld和helloService,Controller里面的RestTemplate调用处也需要改,改完之后,重新按照博主上面的步骤运行。一个HZ集群,一个SH集群,不要漏一个。

下面就是见证奇迹的时刻,让我们访问:http://localhost:8080/hello/service

输出这段话,就表示你的应用运行成功了。下面我们清空四个控制台:

刷新url并查看控制台:

你会发现在这四个控制台的输出像是轮询,一个一个,我们注意到,helloServcie的集群是HZ,我们希望它能够优先访问本集群内的服务,而不是访问其他集群的服务。

但默认的ZoneAvoidanceRule不能实现根据同集群优先来实现负载均衡,所以Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。下面修改负载均衡的策略:

helloWorld:
  ribbon:
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

使用新的,原来的注释起来,再次运行helloService,重新调用上面的接口,就会优先访问本集群的服务了。

为了测试集群挂掉后是否能访问其他的集群,你需要把HZ集群的两个实例下线掉:

然后继续访问上面的接口,只要能成功访问,就代表我们的集群策略是没问题的。 

RestTemplate换成Dubbo行不行,怎么换

RestTemplate是一种比较老的用法,我们现在做RPC会更多的用Dubbo,那么Dubbo该怎么使用呢?现在,我们把RestTemplate替换成Dubbo来看看,能不能和上面的集群调用有一样的表现。

两个pom文件引入依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

两个yml文件引入配置:

dubbo:
  protocol:
    port: -1 # 设置Dubbo服务调用的端口 设置-1能够实现动态自动设置合适端口,生成规则是从20880开始递增
    name: dubbo # 设置端口名称,一般固定就叫dubbo
  registry:
    address: nacos://localhost:8848 # 配置当前Dubbo注册中心的类型和地址
  consumer:
    check: false # 设置为false表示当前项目启动时,不检查要调用的远程服务是否可用,避免报错

 两个启动文件添加新注解

// 如果当前项目是Dubbo服务的生产者,必须添加这个注解
@EnableDubbo

生产者就是服务提供方,消费方不需要,为了防止大家搞错,所以就两个启动类都添加,实际使用中要区分。但也存在即是服务提供方,又是服务消费方的情况。

结构调整

为了能更贴近于真实使用场景,也是为了不在Controller中直接使用Dubbo(可能会带来一些问题),所以我们对项目结构做一些简单的调整,增加service层,包括接口和实现类 。

helloWorld调整

IHelloWorldService类:
package com.codingfire.cloud.helloword.service;

public interface IHelloWorldService {
    String helloWorld();
}
HelloWorldServiceImpl类:
package com.codingfire.cloud.helloword.service.impl;
import com.codingfire.cloud.helloword.service.IHelloWorldService;
import org.springframework.stereotype.Service;

@Service
public class HelloWorldServiceImpl implements IHelloWorldService {

    @Override
    public String helloWorld() {
        return "Hello World!";
    }
}
HHelloController类:
package com.codingfire.cloud.helloword.controller;

import com.codingfire.cloud.helloword.service.IHelloWorldService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HHelloController {

    @Autowired
    private IHelloWorldService helloWorldService;

    @GetMapping("/world")
    public String hello(){
        return helloWorldService.helloWorld();
    }

}

helloService调整

IHelloService类:
package com.codingfire.helloservice.service;

public interface IHelloService {
    String getHelloWorld();
}
HelloServiceImpl类:
package com.codingfire.helloservice.service.impl;

import com.codingfire.cloud.helloword.service.IHelloWorldService;
import com.codingfire.helloservice.service.IHelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;

@DubboService
@Service
public class HelloServiceImpl implements IHelloService {

    @DubboReference
    private IHelloWorldService dubboHelloService;

    @Override
    public String getHelloWorld() {
        String helloWorld = dubboHelloService.helloWorld();
        return helloWorld;
    }
}
SHelloController类:
package com.codingfire.helloservice.controller;
import com.codingfire.helloservice.service.IHelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class SHelloController {

    @Autowired
    private IHelloService helloService;

    @GetMapping("/service")
    public String hello(){

        String helloWorld = helloService.getHelloWorld();

        return "XiaoMing Says:" + helloWorld;
    }

}

重新运行

俩集群,不要忘了啊,手动修改,和上面一样的方式。

运行成功后查看Nacos中状态:

原来的俩服务还在,但是多了其他的,他们分别是我们注册的dubbo服务,有提供者provider,也有消费者consumer,我们下面点进去看看helloWorld集群启动成功没有:

元数据这一列多了好多数据啊,我们看到是dubbo相关的,集群也都正常,图太长,就不一一截了,下面去访问接口:http://localhost:8080/hello/service 

能得到数据,就说明我们的配置没问题,Dubbo引入就是成功的:

查看控制台:

org.apache.dubbo.rpc.RpcException: No provider available from registry localhost:8848 for service com.codingfire.cloud.helloword.service.IHelloWorldService on consumer 192.168.0.102 use dubbo version 2.7.8, please check status of providers(disabled, not registered or in blacklist).

说是com.codingfire.cloud.helloword.service.IHelloWorldService这个类没有注册到白名单?我们看下这个类,这是个接口,所以还是要看其实现类HelloWorldServiceImpl,果然,这个类没有添加Dubbo注解,在类上添加注解:

@DubboService

 下面重新运行helloWorld的四个启动类,记得集群哦,这时候,博主仿佛听到有人在吐槽:博主,你不玩我们会死啊?能不能一步到位?

哈哈哈哈~不好意思,这是为了让大家更好的理解细节处,大家还是先运行项目吧。

a few moments later~

好了,大家都运行成功了吧,下面,重新访问接口:http://localhost:8080/hello/service

漂亮!!!

但是关于Dubbo单独设置负载均衡策略和同集群优先这些就不在这里介绍了,博主还在进行研究,后续会发详细介绍。

权重 

关于集群访问,还可设置权重:

各集群权重可自行根据需要设置。 

结语

到此,这篇关于集群间相互调用的博客就写好了,唯一觉得有些遗憾的是关于Dubbo的详细使用没有给大家讲清楚,后续单独出一篇来进行讲解,请大家稍微期待一下,其实很多人开发中未必用到异地容灾的场景,这篇博客算是给大家一个入门的门票,算不上特别精,但一定对你会有些帮助。未来,会分享更多的集群相关的博客,让我们一起学习,早日成为架构师。

Java后端开发者的个人AI Agent集群构建方案 本方案基于Dify平台构建一个由四个专业化Agent组成的集群,每个Agent负责特定领域的任务,并通过中央协调器实现Agent间的协作。整个系统将与Java后端应用无缝集成,为开发者提供全方位的智能辅助。代码开发助手:专注于代码质量提升、设计模式应用和接口规范优化知识库管理器:负责个人知识的组织、检索和关联学习助手:辅助技术资料整理、学习进度跟踪和知识点提炼AI研究跟踪器:关注AI和大模型领域的最新发展。 阅读详情

相关推荐

大数据开发技术课程报告(搭建Hadoop完全分布式集群&&操作集群)

一、 项目简介和实验环境 本项目主要是建立Hadoop完全分布式集群,并进行集群测试和操作。 主要内容:配置hadoop完全分布式集群的前期准备、安装过程、配置文件、启动过程、Shell操作、Java API操作。 (本文中的一些文件可能带有学号后缀,这是课程报告的要求,实际上不必写后缀) Linux发行版:ubuntu-18.04.4-desktop-amd64 JDK版本:jdk1.8.0_144 Hadoop版本:hadoop-2.7.2 二、 虚拟机的各项准备工作 创建三台虚拟机,并完成各项准备

nefu_ljw的博客 1万+

浅谈Java分布式与集群

在日常操作中,相信很多人在怎么理解Java分布式与集群问题上存在疑惑,今天就大概说说,不注意听,觉得两个可能是同一个东西,其实这个是两个概念。一句话概括:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。把一个业务,拆分成多个业务,然后部署到不同的服务器上,这就是分布式。公司的网上商城,拆分成两个系统:商品系统和支付系统,用户在商品系统上完成浏览商品、加入购物车的动作,在支付系统上完成支付动作(当然用户是无法感知到是在两个系统上完成的操作),这就是分布式。

Alex的博客 3822

eureka 迁移 k8s 集群

Spring Cloud 强上云 系列之 eureka 迁移 故事前奏 前阵子忽然一个需求砸了过来,一忙就是两星期。写bug,挖坑忙的不亦乐乎。这几天军哥一直在群里一直大呼: 你们要输出,要有声音啊。正好今天刚搞完,也确实想放松一下,写篇小白文压压惊。 故事背景 这几年,云计算,容器 docker,微服务 很火,很显眼。当你初步了解这些东西,很多时候会眼前一亮。哇! 还能这么搞? ...

gujian2517的博客 1万+

Java集群实战:单体架构升级到集群架构(一)使用NGINX建立集群

对于大厂的IT技术人员来说,微服务架构是天天都在使用,滚瓜烂熟了。而对小厂的菜鸟程序员来说,我们天天做的都是CRUD,对我们来说集群、分布式、微服务也只是头脑中一个模糊的概念。我们写的大多是单体架构的系统,运行在一台服务器上,如果用户量增加了,服务器撑不住了,我们就加配置吧,反正阿里云腾讯云现在加配置也很容易。但是如果有一天(希望所有菜鸟都有这么一天),我们的用户数增加太快太多,使用最高配置的服务器还是撑不住,对我们来说这算不算是幸福的烦恼?――幸福的是老板,烦恼的却是我们。

dengxiaodai的专栏 2626

使用Memcached实现集群间session共享

java集群中session共享有多重方案,比如可以使用tomcat的session复制的功能来实现集群session共享,但这样做的缺点也很明显,每台服务器上都需要存相同的session,性能随着服务器增加急剧下降,而且容易引起广播风暴。 最近学习了使用Memcached缓存服务器实现session集群共享,下面是学习笔记: 在开发阶段可以使用原生的本地session,在项目上线时再

sd4422739的博客 1883

深入理解Dubbo服务调用与集群容错机制

本篇博客深入解析了Dubbo框架中服务调用的核心机制,包括服务提供者与消费者之间的连接管理、集群容错策略、以及服务路由的动态更新。通过对关键代码和时序图的分析,揭示了服务调用流程和远程过程调用(RPC)的实现细节,为读者提供了对Dubbo服务端和消费端启动流程的全面理解。

weixin_29885875的博客 933

关于Java项目集群部署的概述

通过遵循本文介绍的步骤和注意事项,您可以成功地将Java应用部署到集群环境中,并实现高性能、高可用性和可扩展性。在实际应用中,监控和调优是持续的过程,需要不断地收集和分析性能数据,以保持应用程序的高效运行。通过将应用程序分布在不同的节点上,集群架构能够处理更高的请求量,并在部分节点发生故障时保持系统的整体稳定性。将打包好的JAR文件上传到集群中的每个节点上,并使用适当的命令或脚本启动应用程序。本文将详细介绍Java项目集群部署的步骤和注意事项,帮助您更好地将Java应用部署到集群环境中。

招风的黑耳优快云 1289

波束形成算法:LCMV实现(MATLAB)

阵列信号处理,波束成形,

weixin_43601588的博客 1万+

JEE集群

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33756418的博客 350

一个固定翼飞机仿真程序带你系统性上手如何实现配平(工具箱+脚本)

老规矩,该博客所用的模型和脚本已上传至百度网盘,名字为“固定翼配平训练例子”,自己自取。

zouxu634866的博客 2568

一文读懂GAN, pix2pix, CycleGAN和pix2pixHD

本文翻译、总结自朱俊伟的线上报告,主要讲了如何用机器学习生成图片。 来源:Games2018 Webinar 64期 :Siggraph 2018优秀博士论文报告 人员信息 主讲嘉宾 姓名:朱俊彦(Jun-Yan Zhu) 现状:麻省理工学院博士后(PostDoc at MIT),计算机科学与人工智能实验室(Computer Science and Artificial In...

gdymind的博客 6万+

本篇关于集群

学习技术,一定离不开集群,那么今天我们就来看看集群到底是什么

yokeyhui的博客 271

[VisionPro] CogPMAlignTool 工具详解

[VisionPro] [CogPMAlignTool] [模板匹配]

weixin_43163656的博客 1万+

Java开发 - 让你少走弯路的Redis集群搭建

到此,这篇Redis的集群搭建就给大家介绍完了,可能还存在一些细节上的不足,如果你刚好看到,刚好用到,有什么疑问的话,都可以评论区留言讨论,博主一定知无不言,言无不尽。最后,祝愿大家都能成为优秀的Java开发工程师,加油哦!

CodingFire的博客 5809

浮点数加法器设计

一.设计内容及其要求 内容 根据浮点数的运算规则和IEEE754标准,实现浮点数的加法运算器。 要求: 浮点数格式:符号位1位,阶码8位,尾数23位 要求该实验能完整的体现浮点数的运算的五个步骤:对阶、尾数求和、规格化、舍入(要求使用对偶舍入)、溢出判断。 二.基本要素 浮点数 浮点数即实数,实数是所有有理数和无理数的集合。它之所以被称作浮点数,是因为小数点在数中的位置并不是固定的。一个浮点数值分为两部分存储:数值以及小数点在数值中的位置。 计算机中的浮点运算的计算结果一般是不确定的,一块芯片的浮点运算

Phoenix_ZengHao的博客 1万+

Vue2项目实战:海康威视WEB无插件开发包V3.4从下载到多画面预览(附完整代码)

本文详细介绍了在Vue2项目中集成海康威视WEB无插件开发包V3.4实现多画面监控预览的完整实战方案。内容涵盖从开发包下载、Nginx代理配置、核心组件封装到多画面并发加载与性能优化的全流程,并提供了完整的代码示例,帮助开发者高效解决浏览器无插件播放与多路视频流加载的难题。

c7d8e9的博客 320

2、Redis集群的调用

前言: 在上篇文章中讲到了redis集群环境的搭建,本次将讲解下redis集群的调用,对大多程序员来讲大多数操作还是调用集群环境,对于环境的搭建,后期的维护是不太关心的, 不过手动构建测试环境还是很有必要的。 redis-cli 调用 通过redis-server 启动redis的服务,对应存在命令 redis-cli作为客户端去调用服务器。在redis单机情况下,我们都是

liaokailin的专栏 2219

【智能机器人开发全流程:硬件选型、软件架构与ROS实战,打造高效机器人系统】

通过模块化设计与ROS框架的灵活扩展,可快速搭建适应不同场景的机器人系统。实际开发中需重点关注。

dally2的博客 6037

如何用docker搭建redis集群,来让大佬带你详细了解redis

redis定义redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。

pingguocu3的博客 889

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在Java开发中,集群的概念

集群(Cluster)是多台物理/虚拟机运行同一份 Java 应用,对外表现为一个逻辑服务,通过负载均衡器目标效果高吞吐10 台 4C8G 机器一起扛并发,QPS 从 1000 → 10000。高可用单台 JVM 崩溃,流量秒级漂移到健康节点,SLA 99.9% → 99.99%。可伸缩618 大促前一键加 5 台,活动后缩回去,按量付费不浪费。

Filotimo_的博客 849

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java开发 - 负载均衡你了解多少?

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器FTP服务器企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。通俗点来讲,就好比你要去蹲坑,坑位有五六七八个,你去哪个坑都能解决你的问题,你可能这次去一号坑,下次二号坑......总之,可随机;也可以你自己喜欢哪个坑就常去哪个坑,这个叫权重;甚至你可以每次不重样,这就是轮训。

CodingFire的博客 2043

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MongoDB - MongoDB大数据量迁移:分片集群间的数据迁移方案

MongoDB大数据量迁移:分片集群间的数据迁移方案摘要 本文深入探讨了MongoDB分片集群间大数据量迁移的策略与实现,涵盖了以下核心内容: 迁移背景:分析了性能瓶颈、容量扩展、架构升级等常见迁移需求场景 迁移准备:详细介绍了评估规划、数据备份、一致性验证等关键准备工作 策略选择:对比了在线迁移(业务影响小但复杂)与离线迁移(简单但需停机)的优缺点 技术实现: 使用mongodump/mongorestore工具的基础方法 通过Java程序调用命令行工具的代码示例 最佳实践:强调了网络评估、数据校验、迁移

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Springboot+Spark(http请求调用spark api,并以集群模式运行)

Springboot+Spark

qq_35514685的博客 1万+

Redis集群Java连接

有关Redis 集群的具体配置,在前面的文章中已经有 可以参考:https://blog.youkuaiyun.com/vtopqx/article/details/49246521 Redis 集群配置完成后,有的需要在Java中连接 以下是使用Java的相关连接代码: package com; import java.util.ArrayList; import java.util.HashS...

常年被追砍的博客 7199
上一篇: Java开发 - 让你少走弯路的Redis集群搭建
下一篇: Java开发 - 负载均衡你了解多少?
CodingFire
CodingFire  2022年度博客之星移动开发领域TOP 5 2022年度博客之星移动开发领域TOP 5 领域专家: 移动开发技术领域 领域专家: 移动开发技术领域
博客等级 码龄11年 7927粉丝 387原创
评论 77
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值