zoukankan      html  css  js  c++  java
  • ballerina 学习二十七 项目k8s部署&& 运行

    ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了

    参考项目 https://ballerina.io/learn/by-guide/restful-service/

    项目准备

    • 项目代码
    import ballerina/http;
    import ballerinax/kubernetes;
    
    // 支持k8s 的注解
    @kubernetes:Ingress {
        hostname:"dalongrong",
        name:"ballerina-guides-restful-service",
        path:"/"
    }
    @kubernetes:Service {
        serviceType:"NodePort",
        name:"ballerina-guides-restful-service"
    }
    @kubernetes:Deployment {
        image:"dalongrong/restful_service_k8s:v1.0",
        name:"ballerina-guides-restful-service"
    }
    endpoint http:Listener listener {
        port:9090
    };
    
    // Order management is done using an in memory map.
    // Add some sample orders to 'ordersMap' at startup.
    map<json> ordersMap;
    
    // RESTful service.
    @http:ServiceConfig { basePath: "/ordermgt" }
    service<http:Service> orderMgt bind listener {
    
        // Resource that handles the HTTP GET requests that are directed to a specific
        // order using path '/order/<orderId>'.
        @http:ResourceConfig {
            methods: ["GET"],
            path: "/order/{orderId}"
        }
        findOrder(endpoint client, http:Request req, string orderId) {
            // Find the requested order from the map and retrieve it in JSON format.
            json? payload = ordersMap[orderId];
            http:Response response;
            if (payload == null) {
                payload = "Order : " + orderId + " cannot be found.";
            }
    
            // Set the JSON payload in the outgoing response message.
            response.setJsonPayload(untaint payload);
    
            // Send response to the client.
            _ = client->respond(response);
        }
    
        // Resource that handles the HTTP POST requests that are directed to the path
        // '/order' to create a new Order.
        @http:ResourceConfig {
            methods: ["POST"],
            path: "/order"
        }
        addOrder(endpoint client, http:Request req) {
            json orderReq = check req.getJsonPayload();
            string orderId = orderReq.Order.ID.toString();
            ordersMap[orderId] = orderReq;
    
            // Create response message.
            json payload = { status: "Order Created.", orderId: orderId };
            http:Response response;
            response.setJsonPayload(untaint payload);
    
            // Set 201 Created status code in the response message.
            response.statusCode = 201;
            // Set 'Location' header in the response message.
            // This can be used by the client to locate the newly added order.
            response.setHeader("Location", "http://localhost:9090/ordermgt/order/" +
                    orderId);
    
            // Send response to the client.
            _ = client->respond(response);
        }
    
        // Resource that handles the HTTP PUT requests that are directed to the path
        // '/order/<orderId>' to update an existing Order.
        @http:ResourceConfig {
            methods: ["PUT"],
            path: "/order/{orderId}"
        }
        updateOrder(endpoint client, http:Request req, string orderId) {
            json updatedOrder = check req.getJsonPayload();
    
            // Find the order that needs to be updated and retrieve it in JSON format.
            json existingOrder = ordersMap[orderId];
    
            // Updating existing order with the attributes of the updated order.
            if (existingOrder != null) {
                existingOrder.Order.Name = updatedOrder.Order.Name;
                existingOrder.Order.Description = updatedOrder.Order.Description;
                ordersMap[orderId] = existingOrder;
            } else {
                existingOrder = "Order : " + orderId + " cannot be found.";
            }
    
            http:Response response;
            // Set the JSON payload to the outgoing response message to the client.
            response.setJsonPayload(untaint existingOrder);
            // Send response to the client.
            _ = client->respond(response);
        }
    
        // Resource that handles the HTTP DELETE requests, which are directed to the path
        // '/order/<orderId>' to delete an existing Order.
        @http:ResourceConfig {
            methods: ["DELETE"],
            path: "/order/{orderId}"
        }
        cancelOrder(endpoint client, http:Request req, string orderId) {
            http:Response response;
            // Remove the requested order from the map.
            _ = ordersMap.remove(orderId);
    
            json payload = "Order : " + orderId + " removed.";
            // Set a generated payload with order status.
            response.setJsonPayload(untaint payload);
    
            // Send response to the client.
            _ = client->respond(response);
        }
    }

    构建&&运行

    • 构建
    ballerina build restful_service_k8s
    • 生成的k8s部署文件

      同时生成了helm 以及普通的部署文件(server ingress deploy ),很方便
    • 运行图

    参考资料

    https://ballerina.io/learn/by-guide/restful-service/
    https://github.com/ballerina-guides/restful-service

  • 相关阅读:
    ServletContext 类 EL表达式
    tomcat HttpServlet 的请求方式和域对象存储数据的两种方式
    最新的vue没有dev-server.js文件,如何进行后台数据模拟?
    小程序的全局变量 定义和使用
    vue 生命周期钩子函数
    slice方法可以将“类似数组的对象”变成真正的数组 (遇到时候再研究一次)
    JS中一个new到底做了哪些事情?
    关于JS中的call()方法和apply() 暂时只接触到call() 等接触到apply()再回头来看
    关于 prototype与__proto__ (用到的时候再看一次 加深理解)
    关于闭包最好最容易的理解 -- 很好很强大留作自用
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9907253.html
Copyright © 2011-2022 走看看