blob: 6f6e49fa8ddae46c9a4d233c4d0c4f87cb413223 [file] [log] [blame]
<!doctype html>
<!--
Minimal Mistakes Jekyll Theme 4.4.1 by Michael Rose
Copyright 2017 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE.txt
-->
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<!-- begin SEO -->
<title>Using Confd and Nginx for Edge Service - Apache ServiceComb</title>
<meta name="description" content="Using Confd and Nginx for Edge Service">
<meta name="author" content="">
<meta property="og:locale" content="en">
<meta property="og:site_name" content="Apache ServiceComb">
<meta property="og:title" content="Using Confd and Nginx for Edge Service">
<link rel="canonical" href="https://github.com/pages/apache/incubator-servicecomb-website/docs/users/edging-service/nginx/">
<meta property="og:url" content="https://github.com/pages/apache/incubator-servicecomb-website/docs/users/edging-service/nginx/">
<meta property="og:description" content="Using Confd and Nginx for Edge Service">
<meta name="twitter:site" content="@ServiceComb">
<meta name="twitter:title" content="Using Confd and Nginx for Edge Service">
<meta name="twitter:description" content="Using Confd and Nginx for Edge Service">
<meta name="twitter:url" content="">
<meta name="twitter:card" content="summary">
<script type="application/ld+json">
{
"@context" : "http://schema.org",
"@type" : "Person",
"name" : "Apache ServiceComb",
"url" : "https://github.com/pages/apache/incubator-servicecomb-website",
"sameAs" : null
}
</script>
<meta name="google-site-verification" content="HvJjNd7vvJ-yjSTHlBiIWEYxp_Hrz-PYEY5Idz9LRcA" />
<!-- end SEO -->
<link href="/feed.xml" type="application/atom+xml" rel="alternate" title="Apache ServiceComb Feed">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js"></script>
<script src="/assets/vendor/prism/prism.js"></script>
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<script src="https://www.apachecon.com/event-images/snippet.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
<!-- For all browsers -->
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="stylesheet" href="/assets/vendor/prism/prism.css">
<!--[if lte IE 9]>
<style>
/* old IE unsupported flexbox fixes */
.greedy-nav .site-title {
padding-right: 3em;
}
.greedy-nav button {
position: absolute;
top: 0;
right: 0;
height: 100%;
}
</style>
<![endif]-->
<meta http-equiv="cleartype" content="on">
<!-- start custom head snippets -->
<!-- insert favicons. use http://realfavicongenerator.net/ -->
<link href="https://fonts.loli.net/css?family=Roboto:400,500,700|Source+Code+Pro" rel="stylesheet">
<script src="/assets/js/custom.js"></script>
<!-- end custom head snippets -->
</head>
<body class="layout--single">
<!--[if lt IE 9]>
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
<![endif]-->
<div class="masthead" onmouseleave="$('#childrenShow').css('display', 'none')">
<div class="masthead__inner-wrap">
<div class="masthead__menu">
<nav id="site-nav" class="greedy-nav">
<a class="site-title active" href="/"><img src="https://www.apache.org/img/servicecomb.png"></a>
<ul class="visible-links">
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/">Home</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/developers/">Projects</a>
</li>
<li class="def-nav-li" onmouseenter="$('#childrenShow').css('display', 'block')">
<a class="active" href="/docs/users/">Documentation</a>
<ul id="childrenShow" class="def-children-show-en" onmouseleave="$('#childrenShow').css('display', 'none')">
<li><a href="/docs/getting-started/" class="">Getting started</a></li>
<li><a href="/docs/users/" class="">Docs</a></li>
<li><a href="/slides/" class="">Video</a></li>
<li><a href="/faqs/" class="">FAQ</a></li>
</ul>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/year-archive/">Blogs</a>
</li>
<li class="masthead__menu-item" onmouseenter="$('#childrenShow').css('display', 'none')">
<a href="/release/">Downloads</a>
</li>
</ul>
<button><div class="navicon"></div></button>
<ul class="hidden-links hidden"></ul>
<div class="nav-lang">
<a href=/cn/docs/users/edging-service/nginx/>中文</a>
</div>
</nav>
</div>
</div>
</div>
<div id="main" role="main">
<div class="sidebar sticky">
<div class="back-to-home"><a href="/">Home</a> > Using Confd and Nginx for Edge Service</div>
<nav class="nav__list">
<input id="ac-toc" name="accordion-toc" type="checkbox" />
<label for="ac-toc">Toggle Menu</label>
<ul class="nav__items">
<li>
<span class="nav__sub-title">Java Chassis User Guide</span>
<ul>
<li><a href="/references/java-chassis/zh_CN/index.html" class="">Java Chassis 3</a></li>
<li><a href="/references/java-chassis/2.x/zh_CN/index.html" class="">Java Chassis 2</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Pack User Guide</span>
<ul>
<li><a href="https://github.com/apache/servicecomb-pack/blob/master/docs/user_guide.md" class="">0.5.0</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">ServiceCenter User Guide</span>
<ul>
<li><a href="https://service-center.readthedocs.io/en/latest/user-guides.html" class="">2.0.0</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Kie User Guide</span>
<ul>
<li><a href="https://kie.readthedocs.io/en/latest/" class="">0.2.0</a></li>
</ul>
</li>
<li>
<span class="nav__sub-title">Mesher User Guide</span>
<ul>
<li><a href="https://mesher.readthedocs.io/en/latest/" class="">1.6.3</a></li>
</ul>
</li>
</ul>
</nav>
</div>
<article class="page" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="headline" content="Using Confd and Nginx for Edge Service">
<meta itemprop="description" content="Using Confd and Nginx for Edge Service">
<meta itemprop="dateModified" content="August 15, 2017">
<div class="page__inner-wrap">
<header>
<h1 class="page__title" itemprop="headline">Using Confd and Nginx for Edge Service
</h1>
</header>
<section class="page__content" itemprop="text">
<aside class="sidebar__right">
<nav class="toc">
<!-- <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> -->
<ul class="toc__menu" id="markdown-toc">
<li><a href="#concept-description" id="markdown-toc-concept-description">Concept Description</a> <ul>
<li><a href="#confd" id="markdown-toc-confd"><strong>confd</strong></a></li>
<li><a href="#nginx" id="markdown-toc-nginx"><strong>Nginx</strong></a></li>
</ul>
</li>
<li><a href="#scenario" id="markdown-toc-scenario">Scenario</a></li>
<li><a href="#interconnecting-with-the-service-center" id="markdown-toc-interconnecting-with-the-service-center">Interconnecting with the Service Center</a> <ul>
<li><a href="#method-1-http-call" id="markdown-toc-method-1-http-call"><strong>Method 1: HTTP call</strong></a></li>
<li><a href="#method-2-using-the-open-source-code-api" id="markdown-toc-method-2-using-the-open-source-code-api"><strong>Method 2: Using the open-source code API</strong></a></li>
</ul>
</li>
</ul>
</nav>
</aside>
<h2 id="concept-description">Concept Description</h2>
<h3 id="confd"><strong>confd</strong></h3>
<p>confd is a lightweight configuration management tool. The source code address is: https://github.com/kelseyhightower/confd](https://github.com/kelseyhightower/confd), It can store configuration information in etcd, consul, dynamodb, redis, and zookeeper. confd regularly pulls the latest configuration from storage nodes and then reloads services to complete updating the configuration file.</p>
<h3 id="nginx"><strong>Nginx</strong></h3>
<p>Nginx (engine x) is a high-performance HTTP and reverse proxy server that has the load balancing function. For details, see <a href="http://www.nginx.cn/doc/">http://www.nginx.cn/doc/</a>. This secton describes the HTTP proxy function of Nginx.</p>
<h2 id="scenario">Scenario</h2>
<p>This section describes how to use Nginx and confd to serve as edge services. Also, you can connect Nginx and confd to service center in the Java Chassis microservice framework and dynamically update configuration of Nginx using confd.</p>
<p>For details about how to use the dynamic reverse proxy of Nginx and confd, see <a href="http://www.cnblogs.com/Anker/p/6112022.html">http://www.cnblogs.com/Anker/p/6112022.html</a>, This section describes how to interconnect Confd with the service center of the Java Chassis framework.</p>
<h2 id="interconnecting-with-the-service-center">Interconnecting with the Service Center</h2>
<p>This section describes how to enable confd to obtain service information from the service center. The service center provides the following APIs for external calls:</p>
<h3 id="method-1-http-call"><strong>Method 1: HTTP call</strong></h3>
<p>The tenant header information of “X-Tenant-Name:tenantName” needs to be added to the HTTP API in the Service Center. tenameName is the tenant name. The default value is default, such as X-Tenant-Name:default.</p>
<ul>
<li>
<p>Check the health status of the service center</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/health
</span></code></pre></div> </div>
</li>
<li>
<p>Obtain all microservice information</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/microservices
</span></code></pre></div> </div>
</li>
<li>
<p>Obtain the microservice information with a specified ID</p>
</li>
</ul>
<blockquote>
<ol>
<li>
<p>Obtain the service ID based on the microservice information</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">GET 127.0.0.1:9980/registry/v3/existence?type=microservice&amp;appId={appId}&amp;serviceName={serviceName}&amp;version={version}
</span></code></pre></div> </div>
</li>
<li>
<p>Obtain complete microservice information based on the service ID returned by API</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err">GET 127.0.0.1:9980/registry/v3/microservices/{serviceId}
</span></code></pre></div> </div>
</li>
</ol>
</blockquote>
<ul>
<li>
<p>Obtain all instance information from specified microservice</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/microservices/{serviceId}/instances
</span></code></pre></div> </div>
<p>Add the following information to the header file:</p>
<p>“X-ConsumerId:{serviceId}”</p>
</li>
<li>
<p>Searching microservice instance information</p>
<div class="language-http highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="err"> GET 127.0.0.1:9980/registry/v3/instances?appId={appId}&amp;serviceName={serviceName}&amp;version={version}
</span></code></pre></div> </div>
<p>Add the following information to the header file:</p>
<p>“X-ConsumerId:{serviceId}”</p>
</li>
</ul>
<p>NOTE: The preceding service center address is provides as example only. Set the variables enclosed in curly brackets ({}) as needed. The data returned via HTTP is in JSON format.</p>
<h3 id="method-2-using-the-open-source-code-api"><strong>Method 2: Using the open-source code API</strong></h3>
<p>During the development of the microservice application, you only need to call the API provided by the tool RegistryUtil.java in the ServiceComb framework code to obtain the information in the Service Center. The API is described as follows:</p>
<ul>
<li>Obtain all microservice information
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nc">List</span><span class="o">&lt;</span><span class="nc">Microservice</span><span class="o">&gt;</span> <span class="nf">getAllMicroservices</span><span class="o">();</span>
</code></pre></div> </div>
</li>
<li>Obtain the unique ID of the microservice.
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nc">String</span> <span class="nf">getMicroserviceId</span><span class="o">(</span><span class="nc">String</span> <span class="n">appId</span><span class="o">,</span> <span class="nc">String</span> <span class="n">microserviceName</span><span class="o">,</span> <span class="nc">String</span> <span class="n">versionRule</span><span class="o">);</span>
</code></pre></div> </div>
</li>
<li>Query the microservice static information based on the unique ID of the microservice.
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nc">Microservice</span> <span class="nf">getMicroservice</span><span class="o">(</span><span class="nc">String</span> <span class="n">microserviceId</span><span class="o">);</span>
</code></pre></div> </div>
</li>
<li>Query all the microservice instance information based on the unique IDs of the microservices.
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nc">List</span><span class="o">&lt;</span><span class="nc">MicroserviceInstance</span><span class="o">&gt;</span> <span class="nf">getMicroserviceInstance</span><span class="o">(</span><span class="nc">String</span> <span class="n">consumerId</span><span class="o">,</span> <span class="nc">String</span> <span class="n">providerId</span><span class="o">);</span>
</code></pre></div> </div>
</li>
<li>Query the instance end points information based on the application, interface, and version.
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nc">List</span><span class="o">&lt;</span><span class="nc">MicroserviceInstance</span><span class="o">&gt;</span> <span class="nf">findServiceInstance</span><span class="o">(</span><span class="nc">String</span> <span class="n">consumerId</span><span class="o">,</span> <span class="nc">String</span> <span class="n">appId</span><span class="o">,</span> <span class="nc">String</span> <span class="n">serviceName</span><span class="o">,</span><span class="nc">String</span> <span class="n">versionRule</span><span class="o">);</span>
</code></pre></div> </div>
</li>
</ul>
<p>You can obtain information about the microservice and instance of the Service Center using the HTTP API to dynamically update the Nginx configuration using confd.</p>
</section>
<footer class="page__meta">
</footer>
</div>
</article>
</div>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<div align="center" style="margin: 0 0;">
<ins class="adsbygoogle"
style="display:block; border-bottom: initial;"
data-ad-client="ca-pub-7328585512091257"
data-ad-slot="3049671934"
data-ad-format="auto"></ins>
</div>
<div class="page__footer">
<footer>
<!-- start custom footer snippets -->
<!-- end custom footer snippets -->
<div class="container">
<div class="row justify-content-md-center">
<div class="col">
<ul>
<p class="header">Events</p>
<a class="acevent" data-format="square" data-mode="dark" data-event="random"></a>
</ul>
</div>
<div class="col">
<ul>
<p class="header">Resources</p>
<li><a href="/docs/getting-started/">Getting started</a></li>
<li><a href="/docs/users/">User Guide</a></li>
<li><a href="/slides/">Slides</a></li>
<li><a href="/users/faq/">Common Questions</a></li>
</ul>
</div>
<div class="col">
<ul>
<p class="header">ASF</p>
<li><a href="http://www.apache.org">Foundation</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="http://www.apache.org/events/current-event">Events</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</div>
<div class="col">
<ul>
<p class="header">Contribute</p>
<li><a href="http://issues.apache.org/jira/browse/SCB">Report a Doc Issue</a></li>
<li><a href="https://github.com/apache/servicecomb-website/edit/master/_users/nginx.md">Edit This Page on Github</a></li>
<li><a href="/developers/submit-codes/">Code Submit Guide</a></li>
<li><a href="/security">Security</a></li>
</ul>
</div>
<div class="col">
<ul class="social-icons">
<p class="header">Community</p>
<li>
<a href="mailto:dev-subscribe@servicecomb.incubator.apache.org" rel="nofollow"><span class="mail">Mailing List</span></a>
</li>
<li>
<a href="https://github.com/apache?q=ServiceComb" target="_blank"><span class="github">Github</span></a>
</li>
<li>
<a href="https://twitter.com/ServiceComb" target="_blank"><span class="twitter">Twitter</span></a>
</li>
<li>
<a href="/feed.xml" target="_blank"><span class="rss">Feed</span></a>
</li>
</ul>
</div>
</div>
</div>
<div class="page__footer-bottom">
<div>&copy; 2024 Apache ServiceComb. Powered by <a href="http://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
<div>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
</div>
</footer>
</div>
<script src="/assets/js/main.min.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-101622733-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>