消息传递是每个Java应用程序的关键方面,尤其是对于涉及企业应用程序集成(EAI)或关注点分离的应用程序,例如多层WEB应用程序。

消息传递可以分为两个主要类别,即同步和异步。 另一方面,使用同步消息传递时,对话的发起者等待重播每个提交的请求,而在异步消息传递中,发起者对重播不感兴趣。 Java进程以同步方式进行通信的最常见,最有效的方法是通过远程方法调用(RMI)。 异步通信主要使用Java Messaging Service(JMS)实现。

这篇文章提出了一种设计模式,涉及低延迟和高吞吐量应用程序的Java进程之间的异步通信。

如上所述,JMS被认为是异步应用程序消息传递的“事实”标准。 但是,由于涉及消息交换生命周期的内部检查和过程(即使对于内存代理),JMS也会导致延迟显着增加。 我们处理异步消息传递以实现低延迟和高吞吐量的首选方法是:

  • 如果持久性是强制性的,那么最好的方法是使用JMS持久性队列或主题
  • 如果持久性不是强制性的,那么您应该实现异步消息传递,如下所示:
    • 消息容器应该是一个List(最好是ArrayList实现)或Map(最好是HashMap实现)
    • 发件人进程应使用同步块执行同步访问,以将消息插入容器
    • 实现一个接收器进程池,该池使用同步块同步访问消息容器并收回消息
    • 消息可以以多种方式实现,我们的首选方法是实现Externalizable接口的Plain Old Java Object(POJO),以便手动处理序列化过程。

翻译自: https://www.javacodegeeks.com/2010/05/messaging-principals-in-java.html

Java应用程序中的消息传递主体相关推荐

  1. java向应用程序传递参数_Java应用程序中的消息传递主体

    java向应用程序传递参数 消息传递是每个Java应用程序的关键方面,尤其是对于涉及企业应用程序集成(EAI)或关注点分离的应用程序,例如多层WEB应用程序. 消息传递可以分为两个主要类别,即同步和异 ...

  2. Java web程序中备份oracle数据库

    Java web程序中备份oracle数据库 1.生成备份文件: public ActionForward createDmp(ActionMapping mapping, ActionForm fo ...

  3. 在 Java 应用程序中使用 Elasticsearch: 高性能 RESTful 搜索引擎和文档存储快速入门指南

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  4. elastic search java_在 Java 应用程序中使用 Elasticsearch

    如果您使用过 Apache Lucene 或 Apache Solr,就会知道它们的使用体验非常有趣.尤其在您需要扩展基于 Lucene 或 Solr 的解决方案时,您就会了解 Elasticsear ...

  5. 网络研讨室_免费网络研讨会:Java应用程序中的吞咽异常

    网络研讨室 1月30日参加我们的网络研讨会,以发现Java应用程序中的"隐藏"异常. 如果一棵树落在森林中,但是没有写到原木上,它会发出声音吗? 答案是肯定的. 这些类型的错误可能 ...

  6. lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码

    lombok 生成代码 对Java编程语言最常提出的批评之一是它需要大量的样板代码 . 对于简单的类尤其如此,该类只需要存储一些值就可以. 您需要这些值的getter和setter方法,也许您还需要一 ...

  7. 免费网络研讨会:Java应用程序中的吞咽异常

    1月30日参加我们的网络研讨会,以发现Java应用程序中的"隐藏"异常. 如果一棵树落在森林中,但是没有写到原木上,它会发出声音吗? 答案是肯定的. 这些类型的错误可能会对用户体验 ...

  8. java程序中用户名和密码_在Java应用程序中使用密码术

    java程序中用户名和密码 这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 ...

  9. 使用Project Lombok减少Java应用程序中的样板代码

    对Java编程语言最常提出的批评之一是它需要大量的样板代码 . 对于简单的类尤其如此,该类只需要存储一些值就可以. 您需要这些值的getter和setter,也许您还需要一个构造函数,覆盖equals ...

最新文章

  1. vue打包路径.html问题,如何解决vue.js打包报错问题
  2. 菜鸟要做架构师——java性能优化之for循环
  3. LeetCode 1732. 找到最高海拔
  4. 信息学奥赛C++语言:输出亲朋字符串
  5. 【script】python 中文汉字与url的转换
  6. 一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目
  7. Web入门之VScode连接数据库sql server(超详细)
  8. Office365 PPT加载本地模板
  9. php的一些编码问题
  10. Presto查询出现error executing query异常
  11. ViT为何引入cls_token
  12. 百面机器学习:算法工程师带你去面试
  13. 安卓使用sqlite
  14. vue项目每次打开显示的端口号都不一样
  15. 程序员如何提一个好问题?
  16. Quartus II工具1——signaltap
  17. c++编程猜数字游戏
  18. 孕妇不能吃哪些食物?(协和妇产权威版)
  19. 电子表格分两级:Excel和WPS是一级,未来5年,75%的人将用二级
  20. 「游戏」c++ 炸弹人2.0(新增人机)

热门文章

  1. java mic波形识别_会议季Mic Drop:您不应该错过的13场Java演讲
  2. java 开发:md5_Java社区调查结果:74%的开发人员希望减少详细程度
  3. spring javafx_Oracle Spring Clean JavaFX应该吗?
  4. AWS Lambda事件源映射:使您的触发器混乱无序
  5. mockito java_使用Mockito在Java中进行模拟入门
  6. 使用Datastax Java驱动程序与Cassandra进行交互
  7. Spring休眠教程
  8. memento模式_Java中的Memento设计模式-示例教程
  9. java heroku_Neo4j Java Rest绑定入门(Heroku部署)
  10. 枚举集合的EnumSet