SpringCloud整合php、python示例

本文详述了如何将php和python应用整合到SpringCloud框架下,利用Eureka、Configserver和sidecar实现服务注册与发现。通过sidecar代理,非JVM语言应用也能接入SpringCloud生态,实现健康检查和状态监控。
摘要由CSDN通过智能技术生成

SpringCloud整合php、python示例

代码已上传至: https://github.com/KeoZmy/SpringCloudDemo.git ,博客中没有写到网关 zuul,但是git中已上传

前言

最近一直在花时间研究微服务,各种开源组件组合一个framework到最后决定用springcloud这样成熟的framework。不得不说,springcloud确实很强大,还有Pivotal和Netfix是其强大的后盾与技术输出。最后还是选用了springcloud的netfix作为核心的开发。

springcloud中的sidecar是出于netfix中prana的启发,正如官方reference所说:

Do you have non-jvm languages you want to take advantage of Eureka, Ribbon and Config Server? The Spring Cloud Netflix Sidecar was inspired by Netflix Prana. It includes a simple http api to get all of the instances (ie host and port) for a given service. You can also proxy service calls through an embedded Zuul proxy which gets its route entries from Eureka. The Spring Cloud Config Server can be accessed directly via host lookup or through the Zuul Proxy. The non-jvm app should implement a health check so the Sidecar can report to eureka if the app is up or down

你是否有非jvm语言应用程序需要使用Eureka, Ribbon和Config Server的功能? Spring Cloud Netflix Sidecar 受 Netflix Prana 启发. 它包含一个简单的HTTP API去获取所有注册的实例信息(包括host和port信息). 你也可以通过依赖Eureka的嵌入式Zuul代理器代理服务调用. The Spring Cloud Config Server可以通过host查找 或Zuul代理直接进入. 非JVM应用程序提供健康检查实现即可让Sidecar向eureka同步应用程序up还是down.

简单的说,一个非jvm程序,如:php、python等,想要注册到eureka,但是应用都是一堆别的语言写的,那我应该如何实现呢?Sidecar的原理就是侦听该应用所运行的端口,然后检测该程序的运行状态,官方的描述会更形象一些:

实现

本文主要是参考官方给出结合python的例子,示例了一个springcloud结合php、python的例子。

php准备

先准备一下php的环境,详见:

使用WAMP快速搭建PHP Web开发环境

(ps:我没有做过php的相关开发,只是最近参与公司项目的重构,里面以java代码为主但是也有python、php的模块,自己快速搭建了一个php的demo做测试,如果你是专业的php developer你当然可以选择你自己的方式)

我的wamp服务器www目录:

health.json就是非JVM应用程序提供模仿SpringBoot健康检查接口的可访问的uri. 它应该返回一个json文档类似如下:

`{"status":"UP"}`

by the way,我把服务器的端口改成了3000,默认的是80

如何修改wamp默认80端口

python准备(python大神请随意)

这边主要是写了一个python程序模拟web应用的运行,这个应用占用的端口为5680

import httplib

from twisted.web import server, resource
from twisted.internet import reactor, endpoints

class Health(resource.Resource):
    isLeaf = True

    def render_GET(self, request):
     request.setHeader("content-type", "application/json")
     return '{"status":"UP"}\n'

class Fortune(resource.Resource):
    isLeaf = True

def render_GET(self, request):
    conn = httplib.HTTPConnection('localhost', 5678)
    conn.request("GET", "/fortunes")
    res = conn.getresponse()
    fortune = res.read()
    request.setHeader("content-type", "text/plain")
    return fortune


root = resource.Resource()
root.putChild('health', Health())   
root.putChild('', Fortune())
endpoints.serverFromString(
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值