当前位置: 首页 > 知识库问答 >
问题:

Thrift ActiveMQ集成

谭富
2023-03-14

我的公司目前正在研究Thrift和ActiveMQ的集成。我们希望建立一个独立于语言的服务层,该服务层运行在单个http服务器上,每个thrift服务都能够通过ActiveMQ与其他thrift服务通信。到目前为止,我还没有找到任何其他人试图实施这一点。我很好奇其他人会如何实现这一点,以及是否有这样做的文档。

当前原型使用一个简单的python服务器来托管各种备用服务。在每个服务调用(即更新设置)中,都会创建一条ActiveMQ消息并将其发送到特定队列(即,一个应用程序的设置服务向另一个应用程序发送更新消息)。为设置服务的每个实现创建一个服务侦听器,它能够扫描适当的队列并检测何时发送了相关消息。然后,该侦听器使用Thrift访问该特定应用程序的适当服务。

我正试图找到一种方法,允许服务为thrift对象提供服务,但也可以接收ActiveMQ消息,而无需创建这些侦听器,但我一直找不到用于此的任何资源。

谢谢

共有1个答案

鲜于岳
2023-03-14

从你的描述,你至少有选项,恕我直言:

(1) 使用序列化部分并将序列化消息写入队列。侦听器将它们反序列化,并将它们提供给(本地)处理器实例,该实例将触发其余的处理。

(2) 为其编写专用传输以支持ActiveMQ。它可能有助于更好地封装序列化/反序列化内容,并为客户端/处理器提供常用的调用接口。

还有两个小贴士:

  • 看看THRIFT-812,它演示了与ZeroMQ的结合

将传入数据馈送到本地处理器实例是什么意思?好的,这里有一段代码,我前段时间写的来证明这一点。它是用Delphi编写的,但应该足够简单,以便您能够将其翻译成您选择的任何其他语言。在这种特殊情况下,请求数据被传递并预期为JSON,因此是JSONhtml" target="_blank">协议。

class procedure TTextToolJsonServer.Process( const stmIn, stmOut : TStream);
var handler   : Samples.TTextTool.Iface;
    processor : IProcessor;
    protIn, protOut : IProtocol;
begin
  protIn  := TJSONProtocolImpl.Create(
               TStreamTransportImpl.Create(
                 TThriftStreamAdapterDelphi.Create( stmIn, FALSE), nil));

  protOut := TJSONProtocolImpl.Create(
               TStreamTransportImpl.Create(
                 nil, TThriftStreamAdapterDelphi.Create( stmOut, FALSE)));

  handler   := TTextToolHandler.Create;
  processor := Samples.TTextTool.TProcessorImpl.Create( handler);
  processor.Process( protIn, protOut);
end;
 类似资料:
  • 我是新点燃的。 步骤1:我在两个VM(ubuntu)中安装了Ignite 2.6.0,在一个VM中启动了节点。下面有COMAND。bin/ignite.sh examples/config/example-ignite.xml 步骤2:我的所有配置都在example-default.xml中 步骤3:在其他VM中执行包含datagrid逻辑的client.jar(该VM既是客户机也是节点)。 步骤

  • 我创建了一个新示例,并将代码分为客户端和服务器端。 完整的代码可以在这里找到。 服务器端有3个版本。 服务器无Spring Boot应用程序,使用Spring Integration RSocket InboundGateway 服务器引导重用Spring RSocket autconfiguration,并通过serverrsocketmessagehandler创建ServerRSocketC

  • 可运行和可调用 如果你在Runnable或Callable中包含你的逻辑,就可以将这些类包装在他们的Sleuth代表中。 Runnable的示例: Runnable runnable = new Runnable() { @Override public void run() { // do some work } @Override public String toString()

  • Jinja2 提供了一些代码来继承到其它工具,诸如框架、 Babel 库或你偏好的编辑器 的奇特的代码高亮。这里是包含的这些的简要介绍。 帮助继承的文件在 这里 可 用。 Babel 集成 Jinja 提供了用 Babel 抽取器从模板中抽取 gettext 消息的支持,抽取器的接入点 名为 jinja2.ext.babel_extract 。 Babel 支持的被作为 i18n 扩展 的 一部分

  • Jinja2 提供了一些代码来继承到其它工具,诸如框架、 Babel 库或你偏好的编辑器 的奇特的代码高亮。这里是包含的这些的简要介绍。 帮助继承的文件在 这里 可 用。 Babel 集成 Jinja 提供了用 Babel 抽取器从模板中抽取 gettext 消息的支持,抽取器的接入点 名为 jinja2.ext.babel_extract 。 Babel 支持的被作为 i18n 扩展 的 一部分

  • 我有一个redis集群,有主服务器、从服务器和3个哨兵服务器。主从映射到dns名称node1-redis-dev.com、node2-redis-dev.com。redis服务器版本为2.8 我在application.properties文件中包含以下内容。 但是,当我检查StringRedisTemplate时,在JedisConnectionFactory的hostName属性下,我看到的是

  • sdiff key1 key2...keyN 返回所有给定key的差集 sdiffstore dstkey key1...keyN 同sdiff,并同时保存差集到dstkey下

  • sunion key1 key2...keyN 返回所有给定key的并集 sunionstore dstkey key1...keyN 同sunion,并同时保存并集到dstkey下