Git Product home page Git Product logo

workflow-polaris's Introduction

workflow-polaris

介绍

本项目是基于腾讯开源的服务发现&服务治理平台北极星上构建,目标是将workflow的服务治理能力和北极星治理能力相结合,提供更便捷、更丰富的服务场景。另外其他同型的服务治理系统也可以通过该项目实现与北极星平台的对接。

功能:

  • 基础功能:服务发现、服务注册
  • 流量控制:负载均衡,路由管理

Demo

Discover

#include "PolarisClient.h"
#include "PolarisTask.h"
#include "workflow/WFFacilities.h"
#include <signal.h>

using namespace polaris;
static WFFacilities::WaitGroup wait_group(1);
PolarisClient client;

void polaris_callback(PolarisTask *task) {
    int state = task->get_state();
    int error = task->get_error();
    if (state != WFT_STATE_SUCCESS) {
        fprintf(stderr, "Task error: %d\n", error);
        client.deinit();
        wait_group.done();
        return;
    }
    //get discover results and do something
    struct discover_result resp;
    if (!task->get_discover_result(&resp)) {
        fprintf(stderr, "get disocer_result error: %d\n", error);
        client.deinit();
        wait_group.done();
        return;
    }
    struct route_result route;
    if (!task->get_route_result(&route)) {
        fprintf(stderr, "get route_result error: %d\n", error);
        client.deinit();
        wait_group.done();
        return;
    }
    fprintf(stderr, "\nSuccess. Press Ctrl-C to exit.\n");
}

void sig_handler(int signo) { wait_group.done(); }

int main(int argc, char *argv[]) {
    PolarisTask *task;

    signal(SIGINT, sig_handler);
    std::string url = "http://your.polaris.cluster:8090";
    int ret = client.init(url);
    if (ret != 0) {
        client.deinit();
        exit(1);
    }
    task =
        client.create_discover_task("your.namespace", "your.service.name", 5, polaris_callback);

    PolarisConfig config;
    task->set_config(std::move(config));
    task->start();

    wait_group.wait();
    return 0;
}

Register&&Deregister

#include "PolarisClient.h"
#include "PolarisTask.h"
#include "workflow/WFFacilities.h"
#include <signal.h>

using namespace polaris;
static WFFacilities::WaitGroup wait_group(1);
PolarisClient client;

void polaris_callback(PolarisTask *task) {
    int state = task->get_state();
    int error = task->get_error();
    if (state != WFT_STATE_SUCCESS) {
        fprintf(stderr, "Task error: %d\n", error);
        client.deinit();
        wait_group.done();
        return;
    }
    fprintf(stderr, "Task ok\n");
}

void sig_handler(int signo) { wait_group.done(); }

int main(int argc, char *argv[]) {
    if (argc < 2) {
        fprintf(stderr, "USAGE: %s [r/d]\n", argv[0]);
        exit(1);
    }
    PolarisTask *task;
    signal(SIGINT, sig_handler);
    std::string url = "http://your.polaris.cluster:8090";
    int ret = client.init(url);
    if (ret != 0) {
        exit(1);
    }
    PolarisConfig config;
    if (argv[1][0] == 'r') {
        task = client.create_register_task("your.namespace", "your.service_name", 5,
                                           polaris_callback);
        task->set_config(std::move(config));
        PolarisInstance instance;
        instance.set_host("your.instance.ip");
        instance.set_port(8080);
        std::map<std::string, std::string> meta = {{"key1", "value1"}};
        instance.set_metadata(meta);
        task->set_polaris_instance(std::move(instance));

    } else if (argv[1][0] == 'd') {
        task = client.create_deregister_task("your.namespace", "your.service_name", 5,
                                             polaris_callback);
        task->set_config(std::move(config));
        PolarisInstance instance;
        instance.set_host("your.instance.ip");
        instance.set_port(8080);
        task->set_polaris_instance(std::move(instance));

    } else {
        fprintf(stderr, "USAGE: %s [r/d]\n", argv[0]);
        exit(1);
    }
    task->start();
    wait_group.wait();
    return 0;
}

workflow-polaris's People

Contributors

barenboim avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.