前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Spring实战》摘录 - 24

《Spring实战》摘录 - 24

作者头像
用户1335799
发布2019-07-23 11:19:31
4510
发布2019-07-23 11:19:31
举报
241

Q: #17.1.1-1 | 在异步消息中有两个主要的概念:消息代理(message broker)和目的地(destination) A: 当一个应用发送消息时,会将消息交给一个消息代理。消息代理实际上类似于邮局。消息代理可以确保消息被投递到指定的目的地,同时解放发送者,使其能够继续进行其他的业务。

242

Q: #17.1.1-2 | 尽管不同的消息系统会提供不同的消息路由模式,但是有两种通用的目的地。 A: 队列(queue)和主题(topic)

243

Q: #17.1.1-3 | 点对点消息模型,是什么? A: 在点对点模型中,每一条消息都有一个发送者和一个接收者,如图所示。当消息代理得到消息时,它将消息放入一个队列中。当接收者请求队列中的下一条消息时,消息会从队列中取出,并投递给接收者。因为消息投递后会从队列中删除,这样就可以保证消息只能投递给一个接收者。

244

Q: #17.1.1-4 | 发布—订阅消息模型,是什么? A: 在发布—订阅消息模型中,消息会发送给一个主题。与队列类似,多个接收者都可以监听一个主题。但是,与队列不同的是,消息不再是只投递给一个接收者,而是主题的所有订阅者都会接收到此消息的副本,如图17.4所示。

245

Q: #17.1.2 | 采用同步通信机制访问远程服务的客户端存在几个限制,最主要的是: A:

  • 同步通信意味着等待。当客户端调用远程服务的方法时,它必须等待远程方法结束后才能继续执行。如果客户端与远程服务频繁通信,或者远程服务响应很慢,就会对客户端应用的性能带来负面影响。
  • 客户端通过服务接口与远程服务相耦合。如果服务的接口发生变化,此服务的所有客户端都需要做相应的改变。
  • 客户端与远程服务的位置耦合。客户端必须配置服务的网络位置,这样它才知道如何与远程服务进行交互。如果网络拓扑进行调整,客户端也需要重新配置新的网络位置。
  • 客户端与服务的可用性相耦合。如果远程服务不可用,客户端实际上也无法正常运行。

246

Q: #17.2.1-1 | 如果这些限制正是你所担心的,那你可能很想知道异步通信是如何解决这些问题的。 A:

代码语言:javascript
复制
<bean id="connectionFactory"
      class="org.apache.activemq.spring.ActiveMQConnectionFactory"
      p:brokerURL="tcp://localhost:61616"/>

247

Q: #17.2.1-2 | 配置连接工厂还有另外一种方式,既然我们知道正在与ActiveMQ打交道,那我们就可以使用ActiveMQ自己的Spring配置命名空间来声明连接工厂(适用于ActiveMQ 4.1之后的所有版本)。首先,我们必须确保在Spring的配置文件中声明了amq命名空间。

A:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
  <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jms="http://www.springframework.org/schema/jms"
   xmlns:amq="http://activemq.apache.org/schema/core"
   xsi:schemaLocation="http://activemq.apache.org/schema/core
     http://activemq.apache.org/schema/core/activemq-core.xsd
     http://www.springframework.org/schema/jms
     http://www.springframework.org/schema/jms/spring-jms.xsd
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">
   ...
  </beans>

248

Q: #17.2.1-3 | 下面的<bean>声明定义了一个ActiveMQ队列 A:

代码语言:javascript
复制
<bean id="queue"
      class="org.apache.activemq.command.ActiveMQQueue"
      c:_="spitter.queue" />

249

Q: #17.2.1-4 | 下面的<bean>声明定义了一个ActiveMQ主题

A:

代码语言:javascript
复制
<bean id="topic"
      class="org.apache.activemq.command.ActiveMQTopic"
      c:_="spitter.queue" />

230

Q: #17.2.2-5 | 与连接工厂相似的是,ActiveMQ命名空间提供了另一种方式来声明队列和主题。

A:

对于队列,我们可以使用<amq:quence>元素来声明:

代码语言:javascript
复制
<amq:queue id="spittleQueue" physicalName="spittle.alert.queue" />

如果是JMS主题,我们可以使用<amq:topic>元素来声明:

代码语言:javascript
复制
<amq:topic id="spittleTopic" physicalName="spittle.alert.topic" />

不管是哪种类型,都是借助physicalName属性指定消息通道的名称。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 怀英的自我修炼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档