通信:消息

2018-08-28  本文已影响0人  scheshan

背景

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

限制

解决方案

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

示例

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

微服务示例应用中的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() {}

}

结果

这个模式有以下优势:

这个模式有以下弊端:

这个模式有以下问题:

相关模式

参见

上一篇 下一篇

猜你喜欢

热点阅读