美文网首页
通信:消息

通信:消息

作者: scheshan | 来源:发表于2018-08-28 10:10 被阅读0次

背景

你已经使用了微服务架构。服务需要处理来自应用客户端的请求。将来,服务有时必须协作起来处理这些请求。他们必须采用一种内部通信协议。

限制

解决方案

使用异步消息来进行内部服务通信。服务间通过消息队列交换消息来进行通信。

示例

有几种异步消息技术的例子:

微服务示例应用中的UserRegistrationController是用Scala语言编写的一个例子,它采用Spring框架的RabbitTemplate,通过RabbitMQ发送消息:

@RestController
class UserRegistrationController @Autowired()(registeredUserRepository: RegisteredUserRepository, rabbitTemplate: RabbitTemplate) {

  import MessagingNames._

  @RequestMapping(value = Array("/user"), method = Array(RequestMethod.POST))
  def registerUser(@Validated @RequestBody request: RegistrationRequest) = {
    val registeredUser = new RegisteredUser(null, request.emailAddress, request.password)
    registeredUserRepository.save(registeredUser)
    rabbitTemplate.convertAndSend(exchangeName, routingKey, NewRegistrationNotification(registeredUser.id, request.emailAddress, request.password))
    RegistrationResponse(registeredUser.id, request.emailAddress)
  }

  @ResponseStatus(value = HttpStatus.CONFLICT, reason = "duplicate email address")
  @ExceptionHandler(Array(classOf[DuplicateKeyException]))
  def duplicateEmailAddress() {}

}

结果

这个模式有以下优势:

  • 由于将客户端与服务端解耦,因此它是松散耦合的
  • 由于消息中间件缓存了消息,知道消费者处理它,因此提高了可用性
  • 支持各种各样的通信模式,包括请求 / 回复,通知,请求 / 异步响应,发布 / 订阅,发布 / 异步响应等等

这个模式有以下弊端:

  • 消息中间件需要高可用,带来了额外的复杂度

这个模式有以下问题:

  • 请求 / 回复风格的通信更加复杂
  • 客户端需要发现消息中间件的地址

相关模式

参见

相关文章

  • 通信:消息

    背景 你已经使用了微服务架构。服务需要处理来自应用客户端的请求。将来,服务有时必须协作起来处理这些请求。他们必须采...

  • 消息通信

    为什么需要消息通信? Android的主线程即UI线程是非安全线程,只允许UI线程更新UI状态。其它任务线程处理完...

  • 04、HTML5-跨文档消息通信

    一、跨文档消息通信(同域名) 二、跨文档消息通信(不同域名) postMessage 三、跨文档消息通信(不同域名...

  • Redis 入门(三):订阅/发布、事务、脚本

    一、Redis 消息通信模式 -- 发布/订阅 Publish/Subscribe 是 Redis 的消息通信模式...

  • CEPH消息通信

    1.CEPH通信连接模型: 首先通信双方建立socket连接,然后server端会向client发送banner和...

  • Handler消息通信

    主线程 在程序启动的时候,就调用Looper.prepareMainLooper方法 可以看到上面的代码主要做了这...

  • 组件间通信

    组件间通信 EventBus实现通信在Activity注册EventBus,在Activity写入消息订阅接收消息...

  • 进程的通信方式

    进程通信 1.进程通信的类型 高级通信机制主要分为三大类:共享存储器系统、消息传递系统、管道通信系统。 其中,消息...

  • React笔记 -- 组件传值

    通信问题 组件会发生三种通信。 向子组件发消息 向父组件发消息 向其他组件发消息 React 只提供了一种通信手段...

  • 计算机网络(二)物理层

    2.1 通信基础 通信的目的是传送消息(消息:语音、文字、图像、视频等)。 2.1.1 基本概念 2.1.1.1 ...

网友评论

      本文标题:通信:消息

      本文链接:https://www.haomeiwen.com/subject/iletwftx.html