java动手写cmpp服务

现在,“微服务架构”是编程中的流行概念。 为了跟上软件开发人员的最新发展,我一直在尝试对这种体系结构有一个很好的了解。 具体来说,我一直在寻找一种使用Spring在Java中实现微服务架构的更好方法。

一些背景:我的公司虽然很棒,但其技术栈却过时了。 基本上,我们还没有使用Java 8或微服务。 因此,如果我想更多地了解这些事情之一,就不得不去公司外面看看。 最简单的学习方法就是做到这一点,因此我决定创建一个“待办事项”系统并记录我的经验以供将来参考。

本文的目的是为不同的微服务提供源代码演练。 我不打算深入研究概念和工具。 有很多关于这些的帖子。 我的意图是提出一个包含用于开发微服务的模式,工具和技术的应用示例。

由于这是一个参考应用程序,因此我特意使它尽可能简单,从而使源代码易于理解。 您应该在家中跟随并能够在自己的计算机上运行该应用程序作为参考。

在本文中,我们将使用由8个应用程序组成的“ To Do”应用程序:

  • 提醒
  • 用户
  • 服务发现服务器
  • 邮递员
  • OAuth服务器
  • 系统集成测试
  • API网关
  • Web应用程序客户端

本文将提供整个项目的概述。 稍后,我将更深入地说明我们在每个微服务中使用什么以及如何使用这些组件。

在上图中,您可以看到我们的系统如何与所有微服务进行交互。 用户将访问使用Angular 2编写的Web应用程序。它将连接到OAuth授权服务器,这是可以分配用户和权限的中心点。 该服务器将返回一个JSON Web令牌,其中包含有关客户端的信息及其权限和切碎的范围。 在对用户进行身份验证并获得令牌后,Web应用程序将能够与API网关进行对话。 它将使用JWT,验证它是否来自授权服务器,然后调用微服务并构建响应。

OAuth服务器使用用户服务来获取用户的身份验证详细信息。 此外,API网关使用OAuth服务器来获取用户的信息。

剩余服务 是将被放置在待办事项功能,待办服务有计划的作业检查提醒和通过电子邮件通知用户,该邮件是由 从 提醒服务 通过使用事件 触发 卡夫卡 的 梅勒服务 发送 。

系统集成测试是一个Java应用程序,负责到达提醒服务的端点。

在微服务架构中,我们必须处理在不同IP和端口中运行的许多微服务。 因此,我们需要找到一种无需硬编码即可管理每个地址的方法。

这就是Netflix Eureka进行救援的地方。 这是一个客户端服务发现,它使服务可以自动查找并相互通信。 我们在系统中使用Spring Cloud Eureka。 您应该看一下它是如何工作的,这样您就可以了解我们的REST服务如何在不同的微服务之间进行通信。 一旦Eureka关心服务在何处运行,我们就可以添加实例并应用负载平衡以在微服务之间分配传入的应用程序流量。

在我们的系统中,我们使用Netflix Ribbon作为客户端负载平衡器。 这使我们能够实现容错能力,并通过冗余提高可靠性和可用性。 我们正在使用Netflix Foreign编写声明式REST客户端,并集成Ribbon和Eureka以提供负载平衡HTTP客户端。

我们的系统确实有一些依赖性。 我们正在尝试使用Netflix Hystrix Circuit Breaker将我们的应用程序与依赖项故障隔离。 它有助于阻止级联故障,并使我们无法快速恢复故障,或增加后备故障。 Hystrix为每个依赖项维护一个线程池。 如果线程池已用完,它将拒绝请求而不是将请求排队。 它还提供了断路器功能,可以停止对依赖项的所有请求。 当请求失败,被拒绝或超时时,您还可以实现回退逻辑。

开发任何类型的系统时,安全性都是非常重要的。 微服务架构没有什么不同。 “如何维护微服务的安全性?” 立即出现,第一个答案是OAuth2。 OAuth2绝对是一个很好的解决方案:它是一种众所周知的授权技术,已广泛用于Google,Facebook和Github。

无论如何,不​​提Spring Security就不可能谈论安全性。 在此项目中,我将其与OAuth2一起使用。 在谈论安全分布式系统时,Spring Security和OAuth2是显而易见的选择。

但是,我们在安全性方面又增加了一个元素:JSON Web令牌(JWT)。 如果仅使用OAuth,则需要有一个OAuth授权服务器来对用户进行身份验证,生成令牌并充当 资源服务器 的端点, 以询问令牌是否有效以及它授予哪个权限。 这需要 比实际需要 多两倍的请求 授权服务器 。 JWT提供了一种简单的方式来传输访问令牌中的权限和用户数据。 一旦所有数据都已包含在令牌字符串中,资源服务器就不需要进行令牌检查了。 首先将所有信息序列化为JSON,使用base64编码,最后使用专用RSA密钥签名。 假定所有资源服务器都将具有一个公用密钥,以检查令牌是否已为正确的专用密钥签名,并反序列化令牌以获取信息。

您可以查看OAuth2授权服务器(OAuth服务器)和 资源服务器(API网关) 实现,以查看代码。 主要按照此 博客文章进行了实现 。

在我们的系统中,我们有两种交互方式:同步和异步。 对于异步样式,我们按照模型发布/订阅将分布式事件与Kafka一起使用。 为了同步,我们有支持JSON和XML的REST样式。

有四个级别的RESTful成熟度,从0开始 的水平, 作为Martin Fowler的描述 在这里 。 我们的微服务处于 2级, 因为为简单起见 我决定不使用HATEOAS设计模式实现超媒体控件。

因为我们使用的是Spring Cloud,所以我们必须开箱即用一些可伸缩性模式,这些可伸缩性模式放置在我们的HTTP连接中,值得一提:断路器,隔板,负载平衡,连接池,超时和重试。

如上所述,我们在 Reminder服务Mailer服务 之间的通信 是使用Kafka异步完成的,以便在其他微 服务 之间 分发事件。 在 Reminder服务中 ,我们有一个计划的任务来检查提醒时间并发布事件 RemainderFound。 Mailer服务 中将有一个已订阅事件,该事件 将开始向用户发送电子邮件的过程。 我邀请您看一下我们如何进行这种集成以及如何编写在 Kafka事件模块中 发送给Kafka的数据的序列化/反序列化

整体应用程序通常具有单个关系数据库。 我们可以使用ACID交易。 结果,我们的应用程序可以简单地开始事务,更改多行并在一切正常的情况下提交事务,或者在出现问题的情况下回滚。 不幸的是,在微服务架构中处理数据访问要复杂得多。 这是因为数据分布在不同的数据库中。 跨多种服务实施业务交易是一个巨大的挑战。

在“ ToDo”项目中,我们使用事件来处理跨越多个服务的业务交易。 您可以查看 Mailer服务中 应用CQRS的事件源的实现 。 您将看到如何将读写分开,使我们能够轻松缩放每个部分。 我们将关系数据库用作事件存储,然后使用Kafka分发事件。 我们将需要使这两个操作成为Atomic并避免存储该事件,这样它就不会发布最终的JVM崩溃。 我不使用Kafka作为事件存储,因为从关系数据库构造聚合更简单。 我们正在努力使事情变得简单!

正如您所注意到的,我们在这个项目中已经有了很多东西,仍然有许多挑战尚未解决。 但是,这是一个正在开发的项目,我们计划在其中添加更多内容,例如Spring云配置,带有Docker的Containers,与Jenkins的持续集成,与Spring Sleuth的分布式跟踪,与ELK的日志记录管理等等。 因此,请继续关注我们的 Github 存储库,以查看更多有趣的东西。

下面有很多参考资料,这些资料对我很有帮助。 因此,请看一下您是否认为尚不清楚的事情。 祝好运!

微服务:分解应用程序以实现可部署性和可伸缩性

使用OAuth2保护Spring Cloud微服务

Callista企业博客系列–构建微服务

构建微服务,第3部分。使用OAuth 2.0的安全API

构建微服务:微服务架构中的进程间通信

视频课程—事件源,分布式系统和CQRS

Spring简介Apache Kafka

Spring Cloud Netflix:具有功能区/功能的负载均衡器

Spring Cloud Netflix

Netflix Hystrix –复杂分布式系统的延迟和容错

理查森成熟度模型

翻译自: https://jaxenter.com/introduction-microservices-java-136067.html

java动手写cmpp服务

java动手写cmpp服务_Java动手微服务简介相关推荐

  1. Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构

    Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...

  2. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  3. JAVA b2b2c多用户商城系统源码-服务发现服务端EurekaServer微服务

    一.大致介绍 1.众所周知,在现在互联网开发中,访问地址的IP和端口号是动态的,一个服务停掉再重新启用后IP和端口就可能发生了改变,所以用硬编码是肯定不行了.于是我们尝试使用新的技术来解决这一难题.需 ...

  4. 【Java开发】Spring Cloud 01 :微服务前提精要

    算是新开了一个 Spring Cloud 的坑,本文来源于姚半仙的<Spring Cloud 微服务项目实战>课程,大部分文字内容基于该课程,我的工作可能就是梳理归纳和拓展,希望尽快搞懂相 ...

  5. 毕向东java基础全套视频教程,算法+分布式+微服务

    前言 大家在面试的时候不同程度会被问到JVM的垃圾回收,看面试官水平,有些就背个书就行,比如GC的工作原理,有哪些GC算法和回收器,分别优点和缺点等等,有些面试官估计自己也就背书水平,都没个追问:有些 ...

  6. Java微服务 vs Python微服务 PK

    Java微服务 vs Python微服务 PK 微服务能力 Java微服务生态 Python微服务生态 备注 后台框架/微服务框架 spring boot/cloud django/Nameko ja ...

  7. Spring Cloud【Finchley】实战-04将订单微服务与商品微服务分别拆分为多模块

    文章目录 Spring Cloud[Finchley]专栏 概述 Product微服务功能分析及多模块拆分 拆分原则 Step1. 调整主(父)工程的工程类型 packaging为pom Step2. ...

  8. 浅谈服务治理、微服务与服务网格(Service Mesh)

    浅谈服务治理.微服务与Service Mesh Spring Cloud 之"出身名门望族" 作为当下最火热的微服务框架,Spring Cloud的名字可以说是无人不知.无人不晓, ...

  9. 浅谈服务治理、微服务与Service Mesh(一二三)

    本文为转载#原文链接:易商阜极 引言 本系列文章将为大家介绍当下最流行的服务治理.微服务等相关内容,从服务治理.SOA.微服务到最新的服务网格(Service Mesh)进行综合介绍和分析.作为本系列 ...

  10. 微服务框架 SpringCloud微服务架构 25 黑马旅游案例 25.5 排序和搜索关键字高亮

    微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] SpringCloud微服务 ...

最新文章

  1. EditThisCookie使用
  2. html5 原生拖拽,原生JS实现拖拽效果
  3. JAVA netty 定时任务_Netty HashedWheelTimer 定时任务调用
  4. Flink Weekly | 每周社区动态更新 - 20200107
  5. Java文件File类型转BASE64
  6. 树莓派串口的使用(pyserial库)
  7. Taro从零创建微信小程序步骤
  8. IOS对自动播放语音视频做了限制,h5如何实现间隔一段时间自动播放语音
  9. 计算机软件实习每日学习打卡(6)20201227
  10. excel表格如何把含有数字的单元格筛选出来?
  11. 自动驾驶路侧感知定位技术条件
  12. 机场部队都在用的无人机干扰设备----- TFN MR09
  13. 分享、活动、地推、广告:openinstall全渠道多场景解决方案
  14. java 简易计算器
  15. 【互动媒体】结课作业第二部分:数据分析、可视化以及几个额外问题
  16. Python 编码错误UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 131: illegal multibyte
  17. 电力电子技术实验-单相桥式全控整流电路实验
  18. 使用upx脱壳工具脱壳
  19. Excel VBA 对话框选择文件或者文件夹函数实现源码
  20. alibaba easyexcel读写的使用

热门文章

  1. EP100伺服电机驱动全套资料,STM32平台FOC控制
  2. 现代信号处理——自适应滤波器(匹配滤波器)
  3. C#利用vbs控制3D Stereoscopic Player播放器
  4. 如何设置 IDEA炫酷主题样式
  5. sql if语句实例
  6. xmpp即时通讯协议的特性---长处和缺点!
  7. 强力推荐!五款能让你成为Excel“高手”的Excel插件
  8. MySQL数据库应用与开发答案_MySQL数据库应用与开发习题解答与上机指导(微课版)...
  9. Eucalyptus云平台搭建
  10. tomcat6升级到tomcat7配置的修改