Surging学习笔记一

一、Surging框架简介 surging 是一个分布式微服务引擎,提供高性能RPC远程服务调用,服务引擎支持http、TCP、WS、Mqtt协议,采用Zookeeper、Consul作为surging服务的注册中心,集成了哈希一致性,随机,轮询、压力最小优先作为负载均衡的算法,底层协议集成采用的组件是dotnetty、websocket-sharp、Kestrel。支持通过docker hub 部署服务引擎,也可以通过nuget 引用组件的方式自定义服务引擎。

二、Surging本地部署测试

1、首先使用vs2017拉取surging最新代码

红框标记的有微服务框架代码、作者提供的服务DEMO代码、还有网关代码代码详情可以去作者博客了解,这里就不一一阐述了。

2、安装启动Redis、RabbitMQ、Consul等相关依赖

相关需要安装的都已经成功安装,然后配置Surging.ApiGateway、Surging.Services.Server这两个项目中redis rabbitmq consul的相关配置,因为是本地部署所以配置一般是不需要动的。   3.部署前,我们要配置启动项,我们这里右击解决方案-》属性然后按我图中的顺序设置启动项  

直接点击启动就可以了。 这样我们的网关和服务就已经正常启动了。下面我们测试一下接口是否可以用。

服务端中注册一个SayHello的接口,我们来看看它是否可以正常访问。 使用PostMan调用我本地网关端口中的SayHello接口(这里需要注意,我们调用的时候不在是使用服务的ip和端口了,要使用网关的Ip和端口才能正常访问)

 

OK!访问成功了。  

三、使用Docker部署Surging及相关的测试(docker中部署和本地类似)

1.为了检验Surging服务发现和自动注册功能,我做了一个多服务的Demo。 

2.安装启动Redis、RabbitMQ、Consul等相关依赖。

docker 安装部署这些你可以通过docker pull 相应的版本这样的命令去完成。这里我就演示一个简单点的,鼠标右击小鲨鱼。

点击红框位置,然后下载安装这个。然后就可以通过Kitematic,在搜索栏中下载好RabbitMQ、redis、consul相关镜像  

 

3.网关和服务中配置redis rabbitmq consul   这里我们要找到redis rabbitmq consul docker镜像的ip,具体如何查看其ip,看如下操作:进入到命令窗口,输入docker container ls或者  docker ps -a  查看docker,可以看到现在运行的docker的相关信息。

然后查看consul的相关配置,输入docker inspect  镜像的 containerID,如consul的id是53c171257c61,输入命令如下:docker inspect 53c171257c61 

找到其中的ip是多少,然后修改surging网关中的consul地址为:"Address": "172.17.0.2:8500",其他配置根据上面的操作进行修改,如redis 镜像地址的查找和修改等。

4.添加Docker支持 修改好surging的网关配置后在网关项目上单击右键,点击docker支持 。如图:   自动生成docker-compose.yml后,修改docker-compose.yml配置 网关docker-compose.yml配置  服务A、B、C docker-compose.yml配置  5.使用Docker生成相应的镜像和容器,然后运行容器 运行命令 docker-compose -f docker-compose.yml up -d 生成镜像  启动网关和服务 

查看网关是否发现并注册我写的那三个服务  使用PostMan访问docker中的三个服务    服务A调用成功!

 

服务B调用成功!

 

服务C调用成功! 

四、总结

通过学习Surging让我掌握了很多平时不太基础的知识,比如:Consul服务发现、服务与服务之间之间的通讯、Docker相关的知识等。后面我还会继续深入的研究Surging框架,继续加油! <style></style>

相关文章

Docker是什么Docker是 Docker.Inc 公司开源的一个基于 LXC技...
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng...
镜像操作列出镜像:$ sudo docker imagesREPOSITORY TAG IMA...
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p...
在 Docker 中,如果你修改了一个容器的内容并希望将这些更改...
在Docker中,--privileged 参数给予容器内的进程几乎相同的权...