apollo 参数传递

在我以前的文章中,我介绍了几个有趣的用例,这些用例使用著名的消息代理HornetQ和ActiveMQ通过Websockects实现STOMP消息传递。 但是我没有介绍的是Apollo,因为我个人认为它的API是冗长的,并且不像Java开发人员那样表现力强。 尽管如此,我花更多的时间在Apollo上玩耍,就更加确信我已经拥有了巨大的潜力。 所以这篇文章全是关于阿波罗的 。

我们要解决的问题保持不变:简单的发布/订阅解决方案,其中JavaScript Web客户端发送消息并侦听特定主题。 每当收到任何消息时,客户端都会显示警报窗口(请注意,我们需要使用支持Websockets的现代浏览器,例如Google Chrome或Mozilla Firefox )。

让我们从index.html (导入了很棒的stomp.js JavaScript库)开始着手吧 :

<script src="stomp.js"></script><script type="text/javascript">var client = Stomp.client( "ws://localhost:61614/stomp", "v11.stomp" );client.connect( "", "",function() {client.subscribe("/topic/test",function( message ) {alert( message );}, { priority: 9 } );client.send("/topic/test", { priority: 9 }, "Pub/Sub over STOMP!");});
</script>

客户端部分没有什么不同,只是主题名称现在为/ topic / test 。 但是服务器端相差很多。 Apollo是Scala编写的,它包含异步,非阻塞编程模型。 我认为,这是一件非常好的事情。 它带来的是一个新的编程范式,也不一定是一件坏事。 AppConfig类是用于配置嵌入式Apollo代理的类:

package com.example.messaging;import java.io.File;import org.apache.activemq.apollo.broker.Broker;
import org.apache.activemq.apollo.broker.jmx.dto.JmxDTO;
import org.apache.activemq.apollo.dto.AcceptingConnectorDTO;
import org.apache.activemq.apollo.dto.BrokerDTO;
import org.apache.activemq.apollo.dto.TopicDTO;
import org.apache.activemq.apollo.dto.VirtualHostDTO;
import org.apache.activemq.apollo.dto.WebAdminDTO;
import org.apache.activemq.apollo.stomp.dto.StompDTO;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AppConfig {@Beanpublic Broker broker() throws Exception {final Broker broker = new Broker();// Configure STOMP over WebSockects connectorfinal AcceptingConnectorDTO ws = new AcceptingConnectorDTO();ws.id = "ws";ws.bind = "ws://localhost:61614";  ws.protocols.add( new StompDTO() );// Create a topic with name 'test'final TopicDTO topic = new TopicDTO();topic.id = "test";// Create virtual host (based on localhost)final VirtualHostDTO host = new VirtualHostDTO();host.id = "localhost";  host.topics.add( topic );host.host_names.add( "localhost" );host.host_names.add( "127.0.0.1" );host.auto_create_destinations = false;// Create a web admin UI (REST) accessible at: http://localhost:61680/api/index.html#!/ final WebAdminDTO webadmin = new WebAdminDTO();webadmin.bind = "http://localhost:61680";// Create JMX instrumentation final JmxDTO jmxService = new JmxDTO();jmxService.enabled = true;// Finally, glue all together inside broker configurationfinal BrokerDTO config = new BrokerDTO();config.connectors.add( ws );config.virtual_hosts.add( host );config.web_admins.add( webadmin );config.services.add( jmxService );broker.setConfig( config );broker.setTmp( new File( System.getProperty( "java.io.tmpdir" ) ) );broker.start( new Runnable() {   @Overridepublic void run() {  System.out.println("The broker has been started started.");}} );return broker;}
}

我想很清楚我的意思是冗长且不够表达,但至少很容易理解。 首先,我们在ws:// localhost:61614创建Websockects连接器,并要求它支持STOMP协议。 然后,我们使用名称测试创建一个简单的主题(在客户端将其称为/ topic / test )。 下一个重要步骤是创建虚拟主机,并将主题(和队列(如果有)绑定到该主机 )。 主机名列表非常重要,因为目标解析逻辑在很大程度上依赖它。 在接下来的步骤中,我们将配置Web管理员 UI和JMX工具 ,使我们能够访问配置,统计信息和监视。 要进行检查,请在Apollo代理启动后在Web浏览器中打开此URL 。 最后,通过应用配置并启动代理,我们一切顺利! 如您所见,异步编程模型导致回调和匿名函数( Java 8在哪里?)。

现在,完成配置后,该看一下放置在Starter类中的启动逻辑了(再次,回调和匿名函数用于执行正常的关闭逻辑):

package com.example.messaging;import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;import org.apache.activemq.apollo.broker.Broker;
import org.springframework.context.annotation.ConfigurableApplicationContext;public class Starter  {public static void main( String[] args ) throws Exception {try( ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( AppConfig.class ) ) {final Broker broker = context.getBean( Broker.class );  System.out.println( "Press any key to terminate ..." );System.in.read();    final CountDownLatch latch = new CountDownLatch( 1 );broker.stop( new Runnable() { @Overridepublic void run() {  System.out.println("The broker has been stopped.");latch.countDown();}} );// Gracefully stop the brokerif( !latch.await( 1, TimeUnit.SECONDS ) ) {System.out.println("The broker hasn't been stopped, exiting anyway ...");}}}
}

与前面的示例一样 ,在运行Starter类并在浏览器中打开index.html之后,我们应该看到类似以下内容:

太好了,效果很好! 我非常确定,只是在Scala中重写代码,此Apollo API使用示例将看起来更加紧凑和简洁。 无论如何,如果您正在寻找杰出的消息传递体系结构,我认为Apollo消息代理绝对值得考虑。

所有资源均可在GitHub: Apollo示例上获得 。

参考: Andriy Redko {devmind}博客上的JCG合作伙伴 Andrey Redko 使用ActiveMQ和HornetQ通过WebSockets通过STOMP进行了简单消息传递 。

翻译自: https://www.javacodegeeks.com/2013/09/easy-messaging-with-stomp-over-websockets-using-apollo.html

apollo 参数传递

apollo 参数传递_使用Apollo通过WebSocket通过STOMP轻松进行消息传递相关推荐

  1. 使用Apollo通过WebSocket通过STOMP轻松进行消息传递

    在我以前的文章中,我介绍了几个有趣的用例,这些用例使用著名的消息代理HornetQ和ActiveMQ通过Websockects实现STOMP消息传递. 但是我没有介绍的是Apollo,因为我个人认为它 ...

  2. 使用ActiveMQ和HornetQ通过WebSocket通过STOMP轻松进行消息传递

    消息传递是用于构建不同级别的分布式软件系统的极其强大的工具. 通常,至少在Java生态系统中,客户端(前端)从不直接与消息代理(或交换)进行交互,而是通过调用服务器端(后端)服务来进行交互. 否则,客 ...

  3. Apollo进阶课程㊴丨Apollo安装过程概述

    原文链接:进阶课程㊴丨Apollo安装过程概述 Apollo是一个自动驾驶的平台,推荐的参考运行环境为:ThinkPAD X240.CPU:i5 .四核 .内存 8G. 硬盘容量40G以上. 上周阿波 ...

  4. Apollo架构体系、Apollo运行原理、Apollo配置中心简单介绍(一)

    笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关.服务器地址.接口地址.不同环境的一些配置文件不同,这些在每次发布不同环境.更新项目时都比较繁琐,后来学习微服务时接触到了S ...

  5. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  6. springmvc(18)使用WebSocket 和 STOMP 实现消息功能

    [0]README 1)本文旨在 介绍如何 利用 WebSocket 和 STOMP 实现消息功能: 2)要知道, WebSocket 是发送和接收消息的 底层API,而SockJS 是在 WebSo ...

  7. Spring Boot 2 中通过 WebSocket 发送 STOMP 消息

    描述 在这篇博客中,我们将了解如何设置应用程序以通过 WebSocket 连接,发送和接收 STOMP 消息.我们将以 Spring Boot 2 为基础,因为它包含对 STOMP 和 WebSock ...

  8. 如何在yml中加上git用户名和密码的验证_使用Apollo升级一下yml文件管理和发布

    背景 在一些项目组中,使用springboot+yml文件的组合方式,进行应用开发和发布. 应用读取方式:yml文件通过configmap进行挂载到容器,让应用进行读取. 配置文件管理方式:yml文件 ...

  9. apollo奶奶_奶奶偷豆腐

    apollo奶奶 This past weekend was the Global Game Jam, where teams from all around the world worked tir ...

最新文章

  1. (三)Amazon Lightsail 部署LAMP应用程序之连接到Lightsail数据库
  2. POJ-2251 Dungeon Master bfs搜索
  3. IT自动化:自动化的网络管理变得很重要
  4. js 中对于 css 的变量操作(React也可)
  5. 关于《高性能JavaScript》制表(Memoization)笔记
  6. Winform开发之ADO.NET对象Connection、Command、DataReader、DataAdapter、DataSet和DataTable简介...
  7. 用计算机进行服装设计,电脑服装设计(10制版1班)
  8. thrift使用传输协议TCompactProtocol - xiaoshe的专栏 - 博客频道 - CSDN.NET
  9. 台积电:高雄地震对生产影响比预期略高
  10. html5 新标签xss,HTML5 localStorageXSS漏洞
  11. 解析WINDOWS中的DLL文件---经典DLL解读
  12. python让繁琐工作自动化 第12章 web页面抓取
  13. 【操作系统 · 调度】多处理器 实时调度
  14. CAJ论文格式转PDF(附带书签)
  15. Python网络爬虫简单入门
  16. kirin710f是什么处理器_华为kirin710f处理器相当于骁龙几
  17. 计算机bios设置论文,玩转电脑必看知识——各种BIOS设置详解 的更多相关文章
  18. Spring 注解 属性赋值与自动注入装配
  19. 电脑快捷键操作以及常用知识大全
  20. X战警-最后战役 X-Men: The Last Stand

热门文章

  1. 初一模拟赛总结(5.11)
  2. 【动态规划】最小代价问题
  3. 15、sql编程基本语法介绍
  4. Nacos(九)之Dubbo 融合 Nacos 成为注册中心
  5. Java8 Striped64 和 LongAdder
  6. Java通过Class的对象来获取泛型的class示例
  7. Java提升篇-事务隔离级别和传播机制
  8. springmvc中报错Request processing failed;
  9. 程序员成长之路 java面试指导(作者说的极好要看) 静下心看
  10. latex 数学公式_技能分享——LaTeX篇I