我一直在研究各种通信技术/体系结构/模式/实现(阅读:流行语),包括Web服务(WCF,Axis2),ESB,SOA,并希望了解有关消息传递的JMS.
从概念上讲,JMS听起来很简单.我的看法是它是一个中间代理,管理来自发布者的消息并将它们路由到适当的订阅者.这是通过在发布消息时对消息进行排队,并在收到消息时将它们出列来完成的.
问题1:我对JMS的基本理解是否正确?
在阅读有关技术时,让我烦恼的一件事就是当某个特征(有意或无意)挥手时.
根据我的基本理解,必须运行JMS提供程序才能发送或接收消息.我对发布的假设是JMS提供程序只是等待消息发布,然后将其存储在队列中(内存或数据库支持,具体取决于实现).但是,我不太确定接收是如何工作的.
问题2:如果没有消息可以接收(通常)阻止?
问题2b:如果是这样,阻塞是如何实现的?客户端是否不断轮询消息?在发布消息之前,服务器是否只是不响应(如何在没有超时的情况下工作?)提供者是否会向接收者发起呼叫?
问题2c:如果没有,如何确保及时收到消息,而不影响性能?
基本描述似乎倾向于单个JMS提供程序,以确保集中管理消息而不会丢失.我可以看到缩放是一个问题.
问题3:JMS如何扩展?
在扩展时,我可以看到存在复杂性以确保将单个消息传递给所有适当的订户,而不管哪个物理服务器接收到该消息.
问题3b:JMS实施如何确保在规模化环境中可靠交付?
请注意,虽然这些问题与JMS有关,但它们可能适用于任何消息传递基础结构.我欢迎特定于JMS的答案以及那些更通用或甚至特定于其他技术的答案.
我目前正在评估JMS,但我没有得到我能用它的东西.
目前,我认为这将是一个Usecase:我想创建一个SalesInvoice PDF并在SalesOrder离开Warehouse时打印它,因此在Delivery事务期间,我可以发送一个事务性打印请求,该请求刚刚在SalesOrder事务成功完成时开始.
现在我发现大多数JMS产品都是独立服务器.
我刚刚使用默认的原型创建了一个新的Maven项目,并将以下依赖项添加到我的POM文件中.
<dependencies>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
由于许可问题,我意识到Sun的JAR不在Maven中心,我将以下Maven回购添加到我的POM(我知道这是不好的做法,但需要将其添加到settings.xml)
<repositories>
<repository>
<id>Repo ID</id>
<layout>default</layout>
<name>Java.net Maven repo</name>
<releases>
<enabled>true</enabled>
</releases>
<url>http://download.java.net/maven/2/</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
我仍然在我的POM文件中看到此错误.
"缺少工件javax.jms:jms:jar:1.1:compile"
有没有人知道除了我已有的配置还需要做什么?
我正在尝试开发一个JMS 独立应用程序来读取和写入MQSeries上的Queue.我的老板让我使用纯java JMS(不是ibm.mq lib)来做到这一点.
以下是进行jms连接所需的信息:
mq.hostname=10.10.10.10
mq.channel=API.CLIENTCHL
mq.queueManager=MQPETAPI
mq.port=1422
Run Code Online (Sandbox Code Playgroud)
你知道怎么做吗?或者你有任何链接教我这样做.
我是一个缺乏经验的Java开发人员,试图围绕一些基本的中间件/ SOA概念和技术,特别是:
在网上/维基百科上查看每一个之后,我能够(大部分)获得这些中的每一个都不错的定义.我不理解的是所有这些技术/概念如何在后端协同工作以提供第二/业务层解决方案.
有人可以举一个使用所有这些技术/概念的架构的例子,并解释它们在整体解决方案中扮演的角色吗?一旦我看到一个工作示例,我相信它会帮助我连接大部分点.
编辑:由于我添加了赏金,我有几个答案建议阅读书籍.虽然我很欣赏这里的所有反馈,但我根本无法分享300个声望点的答案,基本上归结为"RTM"(特别是当我平了,并且买不起手册!)重申,赏金和明确的答案将发送给能够在一个有意义的实际例子中击中所有这些子弹的人.这不一定是中间件的纲要!只是一段或两段,展示了如何将所有这些结合在一起以生成Java业务层解决方案.再次感谢.
我正在使用Java BASIC身份验证.
我的Servlet发送了一条JMS消息,但是我需要提供用户和密码来在创建连接时对自己进行身份验证:
javax.jms.ConnectionFactory.createConnection(String username, String password)
Run Code Online (Sandbox Code Playgroud)
我可以从HttpServletRequest.getUserPrincipal()中检索用户名.但似乎无法检索密码.我该如何解决这个问题?
我是卡夫卡的新手.我们希望监控和管理kafka主题.我们尝试了不同的开源监控工具
这两种工具都很好.但我们无法做出应该包含在我们的部署堆栈中的决定.哪一个更好,为什么,以及在哪种情况下?
雅虎的'kafka manager'看起来比较老,而来自LinkedIn的'kafka monitor'是新的
我正在寻找一个小而高效的轻量级JMS代理解决方案,没有或只有最少的依赖.我的消息传递代码应该在我无法控制的很多依赖项的环境中运行.因此,将ActiveMQ解决方案与我的一系列自定义类一起部署,这将是荒谬的.
对我来说,JMS和ESB似乎是非常相关的东西,我试图了解它们究竟是如何相关的.
我已经看到JMS可以用作ESB的传输的句子 - 那么除了传输之外的其他什么应该存在于这样的ESB中?JMS是一个简单的ESB,或者如果不是,那么真正的ESB缺少什么?
jms ×10
java ×7
messaging ×2
apache-kafka ×1
ejb-3.0 ×1
esb ×1
ibm-mq ×1
jar ×1
maven-2 ×1
monitoring ×1
repository ×1
servlets ×1
soa ×1
spring ×1
tomcat ×1