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

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之后,我们应该看到类似以下内容:

Message.STOMP.3

太好了,效果很好! 我非常确定,只是在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 参数传递

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql不能改编码_(转)MySQL设置和修改编码问题

mysql版本&#xff1a;5.7.18一、常用查看字符集设定命令1、查看数据库支持的所有字符集。show character set;(或 show char set;)2、查看当前状态命令(显示结果会包含数据库的字符集设置)status(或 /s)其中Db characterset对应的是数据库目录下的db.opt文件内容。(查到mysql安…

python 编程语言排行榜_2019年6月编程语言排行榜:Python 排名飙升,三年内有望超越Java...

TIOBE 6 月编程语言排行榜 更新已发布&#xff0c;排名前三的依然是&#xff1a;Java, C, Python。本月Python的TIOBE指数再次创下8.5%的历史新高。如果Python能够保持这样的速度&#xff0c;那它完全有可能在3到4年内取代C和Java&#xff0c;从而成为世界上***的编程语言。Pyt…

使用IntelliJ调试Java流

流功能非常强大&#xff0c;只需几行就可以捕获您预期功能的要点。 但是&#xff0c;就像它们在一切正常工作时一样平滑&#xff0c;就像它们在表现不正常时一样令人痛苦。 了解如何使用IntelliJ调试Java Streams并深入了解Stream的中间操作。 在本文中&#xff0c;我将在示例…

四川对口高职本科学校计算机,2018四川对口高职本科学校有哪些

相信很多想要报考四川单招对口高职的同学&#xff0c;都是非常的关心四川对口高职本科学校有哪些的&#xff0c;小编整理了相关信息&#xff0c;希望会对大家有所帮助!四川文化艺术学院(Sichuan University of Culture and Arts)&#xff0c;简称“川文艺”&#xff0c;是经教育…

echart 饼图每一块间隙_花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃...

花10分钟做酱香饼&#xff0c;简单方便又美味&#xff0c;酥脆咸香比买的还要好吃前几年&#xff0c;在单位附近有一家只做酱香饼的小店&#xff0c;刚开张的时候排很长队&#xff0c;我为了一块酱香饼排队半小时。后来买酱香饼的人少了&#xff0c;我三天两头买一块酱香饼解馋…

html 边框轮廓,CSS半圈(边框,仅轮廓)

小编典典您可以使用border-top-left-radius和border-top-right- radius属性根据框的高度(和添加的边框)在框上四角。然后在框的顶部/右侧/左侧添加边框以达到效果。干得好&#xff1a;.half-circle {width: 200px;height: 100px; /* as the half of the width */background-col…

人类一败涂地做图教程_《人类一败涂地》形象绘画技巧图文指南

第2页&#xff1a;展开第四步进行对人物细节描边处理&#xff0c;使粗细不同的变得一致&#xff0c;还是拉近镜头&#xff0c;利用底色扣细致。最重要的一点来了&#xff01;不管你画成什么样子&#xff0c;如果你在护理细节的过程中镜头过于拉进并且没有某一部位时模型会变成黑…

Spring Data Pivotal Gemfire教程

1. Spring Data Pivotal Gemfire –简介 在这篇文章中&#xff0c;我们将介绍有关Spring Data Pivotal Gemfire的全面教程。 Pivotal Gemfire是由Apache Geode支持的内存中数据网格解决方案。 使用Pivotal Gemfire构建的应用程序使您可以在分布式服务器节点之间轻松扩展系统。 …

计算机诞生发展分类特点及应用,计算机的诞生与发展,及其特点

计算机基本常识一、计算机的概念&#xff1a;计算机是一种能迅速而高效的自动完成信息处理的电子设备&#xff0c;它能按照程序对信息进行加工、处理、存储。二、计算机的诞生与发展1、诞生&#xff1a;1946年&#xff0c;美国为计算弹道轨迹而研制成功了世界第一台计算机。2、…

404 单页应用 报错 路由_通过 Laravel 创建一个 Vue 单页面应用(五)

文章转发自专业的Laravel开发者社区&#xff0c;原始链接&#xff1a;https://learnku.com/laravel/t/34858我们在第4部分完成了编辑用户的功能&#xff0c;并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能&#xff0c;以及删除…

使用计算机求解雷达方程,关于雷达方程

满意答案zjit99402014.01.27采纳率&#xff1a;41% 等级&#xff1a;12已帮助&#xff1a;2803人带宽校正系数是Co而不是Do.我们知道雷达接收到回波信号后&#xff0c;必须进行信号处理&#xff0c;使中频接收机的输出端(检波器的输入端)输出的信号和噪声功率比(简称信噪比)…

hook 与aspectj_将AspectJ与NetBeans平台开发集成

hook 与aspectj您是否正在使用NetBeans平台开发项目&#xff1f; 您愿意使用AspectJ来使用AOP吗&#xff1f; 您不知道如何将AspectJ编译器集成到NetBeans的内部版本中&#xff1f; 如果您的回答是“是”&#xff0c;则此帖子适合您。 我决定写这篇技术文章&#xff0c;是因为…

考试用计算机反思800字,考试反思作文800字

【考试】作者&#xff1a; 武佳硕2017年 5月6日 星期六 晴今天我们进行了一场在英华初中免费生考试前测试。虽然这次考试&#xff0c;不会算我们的真实成绩&#xff0c;但是老师要测我们的考试状态&#xff0c;一开始我还自信满满地认为我能考好&#xff0c;没想到我居然靠得一…

静茹docker容器的几种方法_1-容器和docker基础知识

[TOC]## 一 容器的概念### 1.什么是容器&#xff1a;容器是在隔离的环境里面运行的一个进程&#xff0c;这个隔离的环境有自己的系统目录文件&#xff0c;有自己的ip地址&#xff0c;主机名等。也可以说&#xff1a;容器是一种轻量级虚拟化的技术。### 2.容器相对于kvm虚拟机的…

JSON-B非对称属性绑定

JSON-B规范定义了诸如JsonbProperty或JsonbTransient类的绑定批注&#xff0c;以声明方式将Java对象映射到JSON&#xff0c;然后再映射回JSON。 这些注释可以“非对称地”用于定义序列化和反序列化的不同处理。 如果在Java属性上或在getter和setter上标注JSON Binding批注&…

怎么利用计算机计算潮流计算,电力系统潮流计算的目的是什么

电力系统潮流计算的目的是什么潮流计算是研究电力系统稳态运行情况的一种基本电气计算&#xff0c;常规潮流计算的任务是根据给定的运行条件和网路结构确定整个系统的运行状态&#xff0c;如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。潮流计算的结果是电力…

7500 cpuz跑分 i5_小米Pro笔记本亮相跑分网站:处理器包含AMD Zen3、11代酷睿

2020年已经接近尾声&#xff0c;随之而来的将会是一大波新品发布会&#xff0c;不仅是手机&#xff0c;笔记本电脑、显卡等产品也会有新品亮相。一年一度的CES 2021也即将开幕&#xff0c;届时英特尔、英伟达、AMD等知名厂商也都将出席活动。据悉&#xff0c;英特尔将推出11代酷…

2016年计算机网考,2016年电大:计算机网考(全)练习题.doc

2016年电大&#xff1a;计算机网考(全)练习题用来给电子工作表中的行号进行编号的是______。数字在Excel中&#xff0c;输入数字作为文本使用时&#xff0c;需要输入作为先导标记的字符是______。单引号电子工作表中每个单元格的默认格式为______。常规不包含在Excel的格式工具…

2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用

点击上面“妙招姐”免费关注图文版&#xff1a;哈喽大家好&#xff0c;我是妙招姐&#xff0c;洗洁精是我们生活中的必须品&#xff0c;但用洗洁精来清洗餐具或水果等和食物相关的东西多多少少都会有残留&#xff0c;那么今天妙招姐就来教大家用橘子皮来自己制作洗洁精&#xf…

Apache Ignite,Hazelcast,Cassandra和Tarantool之间的主要区别

Apache Ignite在世界范围内得到广泛使用&#xff0c;并且一直在增长。 诸如Barclays&#xff0c;Misys&#xff0c;Sberbank&#xff08;欧洲第三大银行&#xff09;&#xff0c;ING&#xff0c;JacTravel之类的公司都使用Ignite来增强其体系结构的各个部分&#xff0c;这些部分…