zeromq学习记录(八)负载均衡

/**************************************************************

技术博客

http://www.cnblogs.com/itdef/

技术交流群

群号码:324164944

欢迎c c++ windows驱动爱好者 服务器程序员沟通交流

**************************************************************/

#include "stdafx.h"
#include "zhelpers.hpp"
#include <thread>

void worker_thread(void *arg) {
    zmq::context_t context(1);
    zmq::socket_t worker(context, ZMQ_REQ);

    s_set_id(worker, (intptr_t)arg);
    worker.connect("tcp://localhost:5671"); // "ipc" doesn‘t yet work on windows.

    int total = 0;
    while (1) {
        //  Tell the broker we‘re ready for work
        s_send(worker, "Hi Boss");

        //  Get workload from broker, until finished
        std::string workload = s_recv(worker);
        if ("Fired!" == workload) {
            std::cout << "Processed: " << total << " tasks" << std::endl;
            break;
        }
        total++;

        //  Do some random work
        s_sleep(within(500) + 1);
    }
    return;
}

int main() {
    zmq::context_t context(1);
    zmq::socket_t broker(context, ZMQ_ROUTER);

    broker.bind("tcp://*:5671"); // "ipc" doesn‘t yet work on windows.

    const int NBR_WORKERS = 10;
    std::thread workers[NBR_WORKERS];
    for (int worker_nbr = 0; worker_nbr < NBR_WORKERS; worker_nbr++) {
        workers[worker_nbr]= std::thread( worker_thread, (void *)(intptr_t)worker_nbr);
    }

    //  Run for five seconds and then tell workers to end
    int64_t end_time = s_clock() + 5000;
    int workers_fired = 0;
    while (1) {
        //  Next message gives us least recently used worker
        std::string identity = s_recv(broker);
        s_recv(broker);     //  Envelope delimiter
        s_recv(broker);     //  Response from worker       

        s_sendmore(broker, identity);
        s_sendmore(broker, "");
        //  Encourage workers until it‘s time to fire them
        if (s_clock() < end_time)
            s_send(broker, "Work harder");
        else {
            s_send(broker, "Fired!");
            if (++workers_fired == NBR_WORKERS)
                break;
        }
    }

    for (int worker_nbr = 0; worker_nbr < NBR_WORKERS; worker_nbr++) {
        workers[worker_nbr].join();
    }
    return 0;
}

时间: 2024-10-12 21:18:46

zeromq学习记录(八)负载均衡的相关文章

Nginx学习笔记23TCP负载均衡

TCP负载均衡的配置和HTTP负载均衡的配置很相似. (1)Nginx配置文件. stream { upstream myserver{ server 192.168.197.101:2101; server 192.168.197.101:2102; server 192.168.197.101:2103; hash $remote_addr consistent; } server { listen 2001; proxy_connect_timeout 3s; proxy_timeout

Dubbo -- 系统学习 笔记 -- 示例 -- 负载均衡

Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 负载均衡 在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用. 可以自行扩展负载均衡策略,参见:负载均衡扩展 Random LoadBalance 随机,按权重设置随机概率. 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重. RoundRobin LoadBalance 轮循,按公约后的权重设置轮

学习下nginx负载均衡--深入理解nginx

作为代理服务器,一般都需要向上游服务器转发请求.这里的负载均衡是指通过一种策略尽量把请求平均的分发都上游服务器 1.upstream 语法 upstream name {} 配置快: http 栗子(实验通过,每次请求均匀的分布在两台机器上) upstream backend { server 192.168.1.100:8080; server 192.168.1.101:8080; } server { location / { proxy_pass  http://backend; } }

Nginx学习笔记07负载均衡之(二)主机分配策略和主机失效参数

1.1.1. 主机失效参数配置 Nginx的upstream配置块中的server配置项提供了多个参数来控制主机失效时如何处理,用于提高负载均衡配置的实用性. 参数 描述 weight 主机的权重.默认为1. max_fails 主机失败的最大次数.默认为1.超过此次数主机临时不可用.值为0表示不对此主机做失败检查. fail_timeout 主机超过max_fails次数后在fail_timeout时间内临时不可用.默认为10秒. down 永久不可用.参与ip_hash. backup 备份

Nginx学习笔记06负载均衡之(一)负载均衡介绍

1.1.1. 负载均衡的介绍 Nginx中使用upstream配置块,可以方便的配置出一个基于反向代理的负载均衡解决方案. 在upstream中可以包含多个server配置项,每个server配置项指定一个主机地址和端口号,代表一个主机(上游服务器). 在proxy_pass配置反向代理时,可以不指定最终的主机地址,而是只指定upstream配置块指定的引用名称.在本文中,upstream配置了一个包含三个主机地址的负载均衡主机集群. 配置内容: http { include       mim

SpringCloud学习(5)——Feign负载均衡

Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. 在使用Ribbon+RestTemplate时, 利用RestTemplate对http请求的封装处理, 形成了一套模板化的调用方法.但是在实际开发中, 由于对服务依赖的调用可能不止一处, 往往一个接口会被多出调用, 所以通常都会针对每个微服务自行封装一些客户端类来包装这些以来服务的调用.所以Fe

【Spring Cloud学习之三】负载均衡

环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 Spring Cloud 1.2 主流的负载均衡技术有nginx.LVS.HAproxy.F5,Spring Cloud使用ribbon. 一.ribbonribbon是一个负载均衡客户端 类似nginx反向代理,可以很好的控制http和tcp的一些行为.Feign默认集成了ribbon. 二.案例 1.修改上一篇的service-member的controller package com.wjy.controll

SpringCloud学习系列-Feign负载均衡(2)

Feign使用步骤 1.参考microservicecloud-consumer-dept-80   新建microservicecloud-consumer-dept-feign 修改主启动类名字DeptConsumer80_Feign_App 2.microservicecloud-consumer-dept-feign工程pom.xml修改,主要添加对feign的支持 <dependency> <groupId>org.springframework.cloud</gr

zeromq学习记录(二)

/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ 技术交流群 群号码:324164944 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流 **************************************************************/ zeromq 指南里第二个例子是天气更新服务器 socket在代码中标