{"id":207293,"date":"2025-07-08T09:02:24","date_gmt":"2025-07-08T01:02:24","guid":{"rendered":"https:\/\/server.hk\/cnblog\/207293\/"},"modified":"2025-07-08T09:02:24","modified_gmt":"2025-07-08T01:02:24","slug":"krakend%e7%94%a8%e4%bd%9cgo%e5%ba%93%e6%97%b6%e5%a6%82%e4%bd%95%e5%90%af%e7%94%a8%e7%81%b5%e6%b4%bb%e9%85%8d%e7%bd%ae","status":"publish","type":"post","link":"https:\/\/server.hk\/cnblog\/207293\/","title":{"rendered":"krakenD\u7528\u4f5cgo\u5e93\u65f6\u5982\u4f55\u542f\u7528\u7075\u6d3b\u914d\u7f6e"},"content":{"rendered":"<p><b><\/b> <\/p>\n<p>\u5f53\u524d\u4f4d\u7f6e\uff1a <span>&gt;<\/span> <span>&gt;<\/span> <span>&gt;<\/span> <span>&gt;<\/span> <span>krakenD\u7528\u4f5cgo\u5e93\u65f6\u5982\u4f55\u542f\u7528\u7075\u6d3b\u914d\u7f6e<\/span><\/p>\n<p><span>\u6765\u6e90\uff1astackoverflow<\/span><br \/>\n<span>2024-04-21 15:00:28<\/span><br \/>\n<span><i><\/i>0\u6d4f\u89c8<\/span><br \/>\n<span style=\"cursor: pointer\"><i><\/i>\u6536\u85cf<\/span> <\/p>\n<p>\u600e\u4e48\u5165\u95e8Golang\u7f16\u7a0b\uff1f\u9700\u8981\u5b66\u4e60\u54ea\u4e9b\u77e5\u8bc6\u70b9\uff1f\u8fd9\u662f\u65b0\u624b\u4eec\u521a\u63a5\u89e6\u7f16\u7a0b\u65f6\u5e38\u89c1\u7684\u95ee\u9898\uff1b\u4e0b\u9762\u5c31\u6765\u7ed9\u5927\u5bb6\u6574\u7406\u5206\u4eab\u4e00\u4e9b\u77e5\u8bc6\u70b9\uff0c\u5e0c\u671b\u80fd\u591f\u7ed9\u521d\u5b66\u8005\u4e00\u4e9b\u5e2e\u52a9\u3002\u672c\u7bc7\u6587\u7ae0\u5c31\u6765\u4ecb\u7ecd\u300akrakenD\u7528\u4f5cgo\u5e93\u65f6\u5982\u4f55\u542f\u7528\u7075\u6d3b\u914d\u7f6e\u300b\uff0c\u6d89\u53ca\u5230\uff0c\u6709\u9700\u8981\u7684\u53ef\u4ee5\u6536\u85cf\u4e00\u4e0b<\/p>\n<p> \u95ee\u9898\u5185\u5bb9<br \/>\n <\/p>\n<p>\u6211\u4f7f\u7528\u4e86\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u4f46\u6211\u65e0\u6cd5\u5f04\u6e05\u695a\u5982\u4f55\u542f\u7528 https:\/\/www.krakend.io\/docs\/configuration\/flexible-config\/ \u6587\u6863\u4e2d\u63d0\u5230\u7684 krakend \u7075\u6d3b\u914d\u7f6e\u3002 \u5c1d\u8bd5\u4e86\u591a\u79cd\u65b9\u6cd5\uff0c\u5728\u8fd0\u884c\u4ee3\u7801\u4e4b\u524d\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u5e76\u76f4\u63a5\u5bfc\u5165 github.com\/devopsfaith\/krakend-flexibleconfig\u3002\u4f46\u5bf9\u6211\u6765\u8bf4\u6ca1\u6709\u4efb\u4f55\u4f5c\u7528\u3002 \u8c01\u80fd\u5e2e\u6211\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u5417\uff1f<\/p>\n<pre>package main\n\nimport (\n    \"flag\"\n    \"log\"\n    \"os\"\n\n    \"github.com\/devopsfaith\/krakend\/config\"\n    \"github.com\/devopsfaith\/krakend\/logging\"\n    \"github.com\/devopsfaith\/krakend\/proxy\"\n    \"github.com\/devopsfaith\/krakend\/router\/gin\"\n)\n\nfunc main() {\n    port := flag.int(\"p\", 0, \"port of the service\")\n    loglevel := flag.string(\"l\", \"error\", \"logging level\")\n    debug := flag.bool(\"d\", false, \"enable the debug\")\n    configfile := flag.string(\"c\", \"\/etc\/krakend\/configuration.json\", \"path to the configuration filename\")\n    flag.parse()\n\n    parser := config.newparser()\n    serviceconfig, err := parser.parse(*configfile)\n    if err != nil {\n        log.fatal(\"error:\", err.error())\n    }\n    serviceconfig.debug = serviceconfig.debug || *debug\n    if *port != 0 {\n        serviceconfig.port = *port\n    }\n\n    logger, _ := logging.newlogger(*loglevel, os.stdout, \"[krakend]\")\n\n    routerfactory := gin.defaultfactory(proxy.defaultfactory(logger), logger)\n\n    routerfactory.new().run(serviceconfig)\n}<\/pre>\n<p>\u9519\u8bef\u6d88\u606f\u662f\uff1a<code>'configuration.json'\uff1a\u65e0\u6548\u5b57\u7b26'{'\u67e5\u627e\u5bf9\u8c61\u952e\u5b57\u7b26\u4e32\u7684\u5f00\u5934\uff0c\u504f\u79fb\u91cf\uff1a55\uff0c\u884c\uff1a3\uff0c\u5217\uff1a12\u9000\u51fa\u72b6\u60011<\/code> configuration.json \u5982\u4e0b\u3002\u8bbe\u7f6e\u7684\u73af\u5883\u53d8\u91cf\u4e3a <code>fc_enable=1 \\ fc_settings=\"$pwd\/config\/settings\" <\/code><\/p>\n<pre>\"version\": 2,\n  \"name\": \"api gateway\",\n  \"port\": {{ .service.port }},\n  \"cache_ttl\": \"3600s\",\n  \"timeout\": \"10s\",\n  \"github_com\/devopsfaith\/krakend-cors\": {\n    \"allow_origins\": [\n      \"http:\/\/192.168.99.100:3000\",\n      \"http:\/\/localhost:3000\",\n      \"http:\/\/9.30.161.212:30077\",\n      \"http:\/\/9.30.161.212:30072\",\n      \"http:\/\/localhost:8080\"\n    ],\n    \"allow_methods\": [\n      \"POST\",\n      \"GET\",\n      \"PUT\"\n    ],\n    \"allow_headers\": [\n      \"Origin\",\n      \"Authorization\",\n      \"Content-Type\",\n      \"refresh-token\"\n    ],\n    \"expose_headers\": [\n      \"Content-Length\"\n    ],\n    \"max_age\": \"12h\"\n  },\n  \"extra_config\": {\n    {{ marshal .service.extra_config }}\n  },\n  \"endpoints\": []\n}```<\/pre>\n<p> <\/p>\n<h2>\u89e3\u51b3\u65b9\u6848<\/h2>\n<p> <\/p>\n<p>\u5728\u8c03\u8bd5krakend\u7684\u7075\u6d3b\u914d\u7f6e\u65f6\uff0c\u6dfb\u52a0<code>fc_out<\/code>\u53d8\u91cf\u4ee5\u67e5\u770b\u7f16\u8bd1\u540e\u7684\u6a21\u677f\u3002\u4f8b\u5982\uff1a<\/p>\n<pre>FC_ENABLE=1 \\\nFC_OUT=the-compiled-file.json \\\nFC_PARTIALS=\"$PWD\/config\/partials\" \\\nFC_SETTINGS=\"$PWD\/config\/settings\/$TARGET_ENV\" \\\nFC_TEMPLATES=\"$PWD\/config\/templates\" \\\nkrakend check -c krakend.tmpl<\/pre>\n<p>\u7136\u540e\u60a8\u5c06\u80fd\u591f\u6253\u5f00\u6b64 <code>the-compiled-file.json<\/code> \u5e76\u67e5\u770b\u4efb\u4f55\u8bed\u6cd5\u9519\u8bef\u3002\u53ea\u662f\u751f\u6210\u7684\u6587\u4ef6\u4e0d\u662f\u6709\u6548\u7684 json \u6587\u4ef6\uff0c\u65e0\u8bba\u60a8\u662f\u5c06\u5176\u7528\u4f5c\u5e93\u8fd8\u662f\u5b98\u65b9\u7f16\u8bd1\u7684\u6620\u50cf\u3002<\/p>\n<p>\u7ec8\u4e8e\u4ecb\u7ecd\u5b8c\u5566\uff01\u5c0f\u4f19\u4f34\u4eec\uff0c\u8fd9\u7bc7\u5173\u4e8e\u300akrakenD\u7528\u4f5cgo\u5e93\u65f6\u5982\u4f55\u542f\u7528\u7075\u6d3b\u914d\u7f6e\u300b\u7684\u4ecb\u7ecd\u5e94\u8be5\u8ba9\u4f60\u6536\u83b7\u591a\u591a\u4e86\u5427\uff01\u6b22\u8fce\u5927\u5bb6\u6536\u85cf\u6216\u5206\u4eab\u7ed9\u66f4\u591a\u9700\u8981\u5b66\u4e60\u7684\u670b\u53cb\u5427~\u516c\u4f17\u53f7\u4e5f\u4f1a\u53d1\u5e03Golang\u76f8\u5173\u77e5\u8bc6\uff0c\u5feb\u6765\u5173\u6ce8\u5427\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5f53\u524d\u4f4d\u7f6e\uff1a &gt; &gt; &#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4925],"tags":[],"class_list":["post-207293","post","type-post","status-publish","format-standard","hentry","category-4925"],"_links":{"self":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/207293","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/comments?post=207293"}],"version-history":[{"count":0,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/posts\/207293\/revisions"}],"wp:attachment":[{"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/media?parent=207293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/categories?post=207293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/server.hk\/cnblog\/wp-json\/wp\/v2\/tags?post=207293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}