转载地址:http://blog.csdn.net/mn960mn/article/details/51768678
服务注册 - 服务进程在注册中心注册自己的位置。它通常注册自己的主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的详细资料。
服务发现 - 客户端应用进程向注册中心发起查询,来获取服务的位置。服务发现的一个重要作用就是提供一个可用的服务列表
服务定义的格式类似如下:
[plain] view plain copy
在CODE上查看代码片派生到我的代码片
{
"service":{
"id": "jetty",
"name": "jetty",
"address": "192.168.1.200",
"port": 8080,
"tags": ["dev"],
"checks": [
{
"http": "http://192.168.1.200:8080/health",
"interval": "5s"
}
]
}
}
其中,check是用来做服务的健康检查的,可以有多个,也可以没有,支持多种方式的检查
check必须是script或者TTL类型的,如果是script类型,则script和interval变量必须被提供,如果是TTL类型,则ttl变量必须被提供
script是consul主动去检查服务的健康状况,ttl是服务主动向consul报告自己的健康状况
以下是几种配置方式
script check
[plain] view plain copy
在CODE上查看代码片派生到我的代码片
{
"check": {
"id": "mem-util",
"name": "Memory utilization",
"script": "/usr/local/bin/check_mem.py",
"interval": "10s",
"timeout": "1s"
}
}
HTTP check:
[plain] view plain copy
在CODE上查看代码片派生到我的代码片
{
"check": {
"id": "api",
"name": "HTTP API on port 5000",
"http": "http://localhost:5000/health",
"interval": "10s",
"timeout": "1s"
}
}
TCP check:
[plain] view plain copy
在CODE上查看代码片派生到我的代码片
{
"check": {
"id": "ssh",
"name": "SSH TCP on port 22",
"tcp": "localhost:22",
"interval": "10s",
"timeout": "1s"
}
}
TTL check:
[plain] view plain copy
在CODE上查看代码片派生到我的代码片
{
"check": {
"id": "web-app",
"name": "Web App Status",
"notes": "Web app does a curl internally every 10 seconds",
"ttl": "30s"
}
}
注册服务,有三种方式,
1:通过配置文件的方式静态注册
创建文件夹/etc/consul.d
.d代表有许多配置文件在里面
vim /etc/consul.d/jetty.json 内容如下:
[plain] view plain copy
在CODE上查看代码片派生到我的代码片
{
"service":{
"id": "jetty",
"name": "jetty",
"address": "192.168.1.200",
"port": 8080,
"tags": ["dev"],
"checks": [
{
"http": "http://192.168.1.200:8080/health",
"interval": "5s"
}
]
}
}
重启consul,并将配置文件的路径给consul(指定参数:-config-dir /etc/consul.d)
2:通过HTTP API接口来动态注册
直接调用/v1/agent/service/register接口注册即可,需要注意的是:http method为PUT提交方式
如:
curl -X PUT -d '{"id": "jetty","name": "jetty","address": "192.168.1.200","port": 8080,"tags": ["dev"],"checks": [{"http": "http://192.168.1.104:9020/health","interval": "5s"}]}' http://192.168.1.100:8500/v1/agent/service/register
注意,这种方式,和上面的注册方式有一点不一样,body的参数,是上面service的值,这点需要注意
3:使用程序实现服务的注册和发现(Java)
首先加入consul client的依赖
[html] view plain copy
在CODE上查看代码片派生到我的代码片
<dependency>
<groupId>com.orbitz.consul</groupId>
<artifactId>consul-client</artifactId>
<version>0.12.3</version>
</dependency>
[java] view plain copy
在CODE上查看代码片派生到我的代码片
package com.pp.cnosul;
import com.google.common.net.HostAndPort;
import com.orbitz.consul.AgentClient;
import com.orbitz.consul.Consul;
import com.orbitz.consul.HealthClient;
import com.orbitz.consul.model.agent.ImmutableRegCheck;
import com.orbitz.consul.model.agent.ImmutableRegistration;
public class ConsulDemo {
static Consul consul = Consul.builder().withHostAndPort(HostAndPort.fromString("192.168.1.246:8500")).build();
/**
* 服务注册
*/
public static void serviceRegister() {
AgentClient agent = consul.agentClient();
//健康检测
ImmutableRegCheck check = ImmutableRegCheck.builder().http("http://192.168.1.104:9020/health").interval("5s").build();
ImmutableRegistration.Builder builder = ImmutableRegistration.builder();
builder.id("tomcat1").name("tomcat").addTags("v1").address("192.168.1.104").port(8080).addChecks(check);
agent.register(builder.build());
}
/**
* 服务获取
*/
public static void serviceGet() {
HealthClient client = consul.healthClient();
String name = "tomcat";
//获取所有服务
System.out.println(client.getAllServiceInstances(name).getResponse().size());
//获取所有正常的服务(健康检测通过的)
client.getHealthyServiceInstances(name).getResponse().forEach((resp) -> {
System.out.println(resp);
});
}
public static void main(String[] args) {
serviceRegister();
serviceGet();
}
}
当然了,还可以使用如下consul api
[html] view plain copy
在CODE上查看代码片派生到我的代码片
<dependency>
<groupId>com.ecwid.consul</groupId>
<artifactId>consul-api</artifactId>
<version>1.1.10</version>
</dependency>
[java] view plain copy
在CODE上查看代码片派生到我的代码片
import com.ecwid.consul.v1.ConsulClient;
import com.ecwid.consul.v1.ConsulRawClient;
import com.ecwid.consul.v1.agent.model.Service;
public class App {
public static void main(String[] args) {
ConsulRawClient client = new ConsulRawClient("192.168.1.100", 8500);
ConsulClient consul = new ConsulClient(client);
//获取所有服务
Map<String, Service> map = consul.getAgentServices().getValue();
}
}
其中,spring cloud 使用的就是第二种consul api
- 浏览: 4929263 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
从0开始的微服务架构:(一)重识微服务架构
2017-11-05 17:13 635导语 虽然已经红了很 ... -
API网关那些儿
2017-11-05 17:14 971目录 为什么需要API Gateway 简化 ... -
微服务网关解决方案调研和使用总结
2017-11-04 18:36 2203一.什么是网关 1.1 什么是网关 API Gate ... -
kubectl delete pod Terminating 删不掉
2017-10-27 17:09 7112kubectl delete pod dev1-homepag ... -
k8s 1.7.4 版本环境异常
2017-10-27 17:00 616k8s 1.7.4 版本环境异常 场景:2个节点主板 ... -
分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型
2017-10-17 17:29 9331. 柔性事务和刚性事务 2. 两阶段提交(2PC) ... -
多种负载均衡算法及其Java代码实现
2017-10-14 16:35 800首先给大家介绍下什么是负载均衡(来自百科) ... -
使用Jenkins进行持续构建与发布应用到Kubernetes集群中
2017-10-10 13:45 1636本文已归档到kubernetes-handbook中的【最 ... -
关于分布式事务、两阶段提交协议、三阶提交协议
2017-10-04 22:44 642随着大型网站的各种高 ... -
浅尝TensorFlow on Kubernetes
2017-09-27 19:07 1268Distributed TensorFlow 2016 ... -
Feature Flag 功能发布控制
2017-08-30 17:44 688产品在新功能发布前, ... -
常见缓存算法和缓存策略
2017-08-22 15:25 769缓存算法:缓存法通过设计良好的数据分块、预取、顺序预取、缓 ... -
缓存、缓存算法和缓存框架简介
2017-08-22 15:18 633引言 我们都听过 cache,当你问他们是什么是缓存的时候 ... -
技术架构组工作职责
2017-08-18 10:58 1405技术架构组工作目标 落地本部门的技术规划,负责 ... -
使用 Spring Cloud Stream 构建消息驱动微服务
2017-08-17 10:00 1652微服务的目的: 松耦合 事件驱动的优势:高度解耦 ... -
SpringCloud中Rabbitmq的使用
2017-08-17 10:01 1389SpringCloud中Rabbitmq的使用 1.po ... -
Netflix学习笔记:Ribbon
2017-08-16 10:24 663Ribbon是什么? Ribbon是Netflix发布的 ... -
Netflix源码解析之Ribbon:客户端负载均衡器Ribbon的设计和实现
2017-08-16 10:30 9001. LB的基本功能要求 想想一个LB是怎么工作的,不管 ... -
Spring Cloud源码分析(四)Zuul:核心过滤器
2017-08-16 10:25 599通过之前发布的《Spring Cloud构建微服务架构(五 ... -
zuul入门(1)zuul 的概念和原理
2017-08-16 10:25 964一、zuul是什么 zuul ...
相关推荐
.NetCore+Consul+Ocelot实现服务网关和服务注册与发现,此Demo是个完整的列子,下载可直接运行。
完美实现了.net core + consul的功能,直接可以运行。...它内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等),使用起来也较为简单
主要介绍了Spring Cloud Consul 实现服务注册和发现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了详解使用Spring Cloud Consul实现服务的注册和发现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Ocelot-Consul .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡
前言 我个人觉得,中间件的部署与使用是非常难记忆...它主要实现了两个功能,服务注册与发现与自身的负载均衡的集群。 我们可以把他理解为一个没有界面的应用程序,因为没有界面,所以想启动Consul就只能使用命令行了;
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。...
Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储(配置中心)、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等),使用起来也较为简单。...
与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也...
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。...
比如Airbnb的SmartStack等相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等),使用起来也较为...
Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等),使用起来也较 为简单。
供 EdgeX 微服务的 Go 实现使用的注册表客户端...初始化与注册表服务的连接,将服务注册到注册表服务以进行发现和运行状况检查回调,从注册表中拉取依赖服务的服务终结点信息。通过注册表服务检查依赖服务的运行状况。
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。
包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性: **服务发现**:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以...
consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。...
.NETFramework调用Consul的动态库,内附dll及调用方式代码,用户只需要在Framework项目引用该dll,按示例代码调用,即可实现Framework程序在Consul里的注册与注销,支持Framework4.6
consul是用于分页式系统中服务注册和发现。与其他分布式服务注册与发现的方案,Consul的方案更”一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖...