python 微服务架构_微服务架构(Python)

在后端开发方面,Java的使用呢要远比Python广泛,所以Java的微服务框架非常流行,但Python的微服务框架却很少有人问津。在大多数需要微服务的场合下直接用Java的各种工具就可以解决问题,但如果业务代码使用Python写的,那么使用Java工具就不太方便了。

其实Python也有自己的微服务框架,其中用的最多的就是nameko,nameko框架轻便,使用简单,易上手,是一个很不错的微服务框架

一.微服务框架原理

微服务架构的实现方式

微服务架构最重要的就是使用什么方式进行服务间通信(也称作服务调用),按照通信方式的不同,主要可以分为同步通信和异步通信两种方式:

同步通信

同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些。同步通信最常用的两种协议是RESTful和RPC,而目前使用最广泛,最有名的两种微服务框架Spring Cloud和Dubbo分别使用了RESTful和RPC协议。RESTful和RPC两种协议各有优势,具体使用要看业务场景。

Dubbo框架是一个非常流行的采用同步通信的分布式微服务框架,下图就是Dubbo框架的工作原理图:

5c12bf86ee6826253151f99956cdbf0b.png

首先一个微服务应用程序需要有服务的生产者和服务的消费者,另外还需要一个注册中心(常见的有zookeeper和rabbitmq等)来管理和调度服务。微服务架构的程序运行的一般步骤为:

服务提供方,即生产者启动服务,并将服务提交到注册中心注册服务

服务需求方,即消费者连接到注册中心,向注册中心发出请求,申请需要的服务

注册中心根据消费者发出的请求来调度服务,将对应的服务提供者(生产者)的信息发送给消费者

消费者和生产者之间建立连接,消费者调用服务

记录服务调用过程中的信息

异步通信

异步通信一般通过消息中间件来进行服务间通信,消息中间件能为调用之间提供的缓冲,确保消息积压不会冲垮被调用方,同时能保证调用方的服务体验,继续干自己该干的活,不至于被后台性能拖慢。不过需要付出的代价是一致性的减弱。

nameko框架就是一个采用异步通信方式的微服务框架,采用RabbitMQ消息队列作为消息中间件,原理非常简单,使用起来也很方便。

ea725194c45f74ce73a4f189e74753cd.png

二.入门案例–使用nameko框架实现微服务程序

2.1 安装注册中心

nameko采用RabbitMQ作为注册中心,所以使用nameko必须要先安装RabbitMQ

以docker容器的方式运行RabbitMQ是最为简便快捷的方式,两行命令就搞定了,这里介绍如何使用docker运行RabbitMQ。

第一步:从DockerHub拉取rabbitmq镜像

1

第二部:运行RabbitMQ容器

1

如果需要设置用户名和密码,则使用这条命令

1

我运行容器时没有设置用户名和密码,所以使用用户名guest,密码guest登录。http://localhost:15672/

badfc331087acc7862cb2adfc303073a.png

登录成功界面

db772d25c879c140741dcaa0174109bf.png

2.2 服务生产者和服务消费者

演示程序的项目结构(没有用到app.py,忽略该文件)

05eaacc3602c95af54067e683a35d0c9.png

hello_service.py发布服务,服务名称为“hello_service”

1

2

3

4

5

6

7

8

service.py调用服务

1

2

3

4

5

6

7

8

9

10

11

12

2.3 启动微服务

使用nameko框架的run命令启动微服务

1

如果注册中心rabbitmq没有成功启动,会显示如下信息

044d0394d4a5a8a4f7921ea10ab990c1.png

如果现实信息如下则表示服务成功启动

8fd6f2d8349db046eda1c3c8f867c654.png

运行service.py调用服务后在命令行打印出“hello world”,服务被成功调用

3cb886dae4bd68f2a61b429f9eecfb24.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527029.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue修改入口文件名字_webpack打包vue项目,可修改配置文件

问题:vue项目打包完成后,如需改变配置文件中的信息,比如域名修改(如下图config.js),是不可能在配置文件中直接更改的,因为配置文件是前端写死的,这时只能手动更改项目中的配置,然后重新打包npm …

java判断正整数正则_Java正则验证正整数的方法分析【测试可用】

本文实例讲述了Java正则验证正整数的方法。分享给大家供大家参考,具体如下:package des;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Num {/*** param args*/public static void main(String[] args) {// TODO Auto-ge…

java 官网下载jdk源码_openJDK之如何下载各个版本的openJDK源码

如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢?现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢?1.openJDK的项目图1 可以看到有openJDK6、openJDK7、…

java 最大分词算法_Java实现的最大匹配分词算法详解

本文实例讲述了java实现的最大匹配分词算法。分享给大家供大家参考,具体如下:全文检索有两个重要的过程:1分词2倒排索引我们先看分词算法目前对中文分词有两个方向,其中一个是利用概率的思想对文章分词。 也就是如果两个字&#x…

java jnotify_Jnotify文件监控的用法以及Jar文件导入的方法

简介Jnotiy, 支持动态监控(支持级联监控)文件夹和文件的jar包。在linux中,调用linux底层的jnotify服务。在windows中,需要添加附件的dll文件。因为通用的Maven仓库中没有此Jar文件,pom.xml文件需要如下配置:net.contentobjects.jn…

java 异常练习题_Java 异常(习题)

异常Key Point* 异常的概念和分类* 异常的产生和传递* 异常的处理* 自定义异常练习1. 填空Java 中所有的错误都继承自throwable类;在该类的子类中,Error类表示严重的底层错误,对于这类错误一般处理的方式是不要求我们对其处理Exception类表示…

mysql 半同步 主主_MySQL主从,半同步,主主复制

MySQL Replication我们知道,MySQL数据库的二进制日志记录着每一个明确或者潜在可能导致数据库发生改变的sql语句,因此我们可以基于二进制日志来实现mysql的主从一致。而我们在此提到的mysql的复制的简单过程就是:首先mysql的主服务器(Master)…

java 数据队列_Java 数据结构 - 队列

Java 数据结构 - 队列我们今天要讲的数据结构是队列,比如 Java 线程池任务就是队列实现的。1. 什么是队列和栈一样,队列也是一种操作受限的线性结构。使用队列时,在一端插入元素,而在另一端删除元素。1.1 队列的主要特性队列中的数…

java+set+split_阿里资深工程师教你如何优化 Java 代码!

原标题:阿里资深工程师教你如何优化 Java 代码!作者 | 王超责编 | 伍杏玲明代王阳明先生在《传习录》谈为学之道时说:私欲日生,如地上尘,一日不扫,便又有一层。着实用功,便见道无终穷&#xff0…

myVariable是java标识符吗_java 标识符与变量

一、Java 标识符三要素1.标识符由字母、下划线(_)、美元符号($)或者字母组成。2.标识符应以字母、下划线(_)、美元符开头。3.标识符字符大小写敏感,长度无限制。标识符最重要的就是 见名知意并且不能与java关键字重名!二、Java 变量1.java变量是程序中最基本的单元。…

友盟统计java代码_SFAnalytics 分析友盟统计源码,反编译 SDK,还有部分没有 出来 android 259万源代码下载- www.pudn.com...

文件名称: SFAnalytics下载 收藏√ [5 4 3 2 1 ]开发工具: Java文件大小: 8023 KB上传时间: 2016-06-05下载次数: 0提 供 者: 花心大萝卜详细说明:分析友盟统计源码,反编译友盟统计SDK,还有部分没有反编译出来-Analysis their Allies s…

java mvc数据库 封装_关于SpringMvc参数封装_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

SpringMVCSpring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。SpringSpring是一个开源框架,Spring是于2003 年兴起的…

20199计算机二级java答案_计算机二级Java练习题-2019.9

是不是急于做大量的计算机等级考试题库,却因测试结果不尽人意而心慌不安?不要急!考无忧小编为大家准备了一些二级Java练习题,希望能帮助大家高效复习,轻松通关!1.下列叙述中正确的是()。A.栈是“先进先出”…

平行志愿遵循分数优先php,2020平行志愿的录取规则是什么有哪些优势

摘要: 2020平行志愿的录取规则是什么有哪些优势为你介绍平行志愿的投档原则仍为“分数优先,遵循志愿”,而传统的顺序志愿则是根据“志愿优先,按分排序”。 2020平行志愿录取规则 平行志愿的投档原则仍为“分数优先,遵循…

Oracle quartile函数,Oracle分析函数六——数据分布函数及报表函数

Oracle 分析函数——数据分布函数及报表 函数CUME_DIST功能描述:计算一行在组中的相对位置, CUME_DIST 总是返回大于 0 、小于或等于 1 的数,该数表示该行在 N 行中的位置。例如,在一个 3 行的组中,返回的累计分布值为…

redhat配置oracle yum源,Redhat5和6 YUM源配置的区别

一、概述随着各个软件版本的不断升级,我们需要掌握的软件特性也越来越多,技术的不断更新也促进了我们脑细胞的循环。 今天在配置RedHat6.3的yum源时也出现了一个有趣的事情,下面请听俺道来。二、问题处理问题源于哥们处,自己就搭建…

linux7 修改服务启动项目命令,centos7服务部署flask项目

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?centos7语言配置问题登录服务器,注意观察是否出现以下警告提示warning: setlocale: LC_CTYPE: cannot change locale (en_US.utf8): No such file or d…

虚拟机linux中怎样打开qt,虚拟机中在Centos 4.7中安装qt-x11-opensource-4.4.3

本人最近学习qt,把qt安装在了虚拟机下,用的是免费的Linux,qt是Linux下开发c不错的软件,经过了2天的奋战,终于把qt安装在了自己的机器上面,现在把安装步骤告诉大家,希望对你们安装错误的同志们有…

linux top p 乱码,将Linux top命令输入到指定文件时的乱码问题

根据需求,项目需要读取linux系统环境参数,所以需要将top命令的输出结果输入到文件中。用重定向命令如下:topresult.txt。用vi打开文件:viresult.txt。显示的根据需求,项目需要读取linux系统环境参数,所以需…

win10子linux如何重置密码,Win10如何使用Windows PowerShell命令重置本地账户密码

在win10系统中,都自带有本地账户,为了安全也会给本地商户设置密码,不过使用一段时间之后,想要重置本地账户密码,但是很多用户并不知道要如何操作,其实我们可以使用Windows PowerShell命令方式来实现&#x…