`

4.4在VM内部连接到activeMQ

阅读更多
VM连接器被java应用用来打开嵌入式代理并连上它。使用它意味着在客户端和嵌入式代理间没有网络连接被建立。它们通过代理对象的方法调用直接交互。因为没有应用网络栈,性能提升显著。代理在使用VM协议进行第一次连接的时候开启。之后所有VM交互链接如果是对应同一个虚拟机,那么会连接同一个代理。
用VM协议创建的代理不缺少ActiveMQ的任何基本特性。所以,举例来说,它也能被其他连接器配置。当所有使用VM协议连接代理的客户端关闭了它们的连接,代理会自动关闭。
VM连接的URI语法如下:
vm://brokerName?key=value
代理名字在VM连接器URI中扮演了重要的角色,它唯一指定了代理。比如,你可以通过不同的代理名字创建不同的代理。代理名字是唯一需要不同的地方。
传输选项使用URI查询部分来设置,就像之前讨论的连接器一样。该连接器的详细参考信息在ActiveMQ的网站上(http://mng.bz/716b)。
关于VM传输协议选项中重要的是你能利用它们在一些程度上配置代理。那些以broker.为前缀的配置被用来调节代理。例如,接下来的URI设置了代理为不支持消息持久性(消息持久在第5章中论述):
vm://broker1?marshal=false&broker.persistent=false
也有一个替代它的URI语法能用来配置嵌入式代理:
vm:broker:(transportURI,network:networkURI)/brokerName?key=value
(图略)
完成的代理URI的说明信息在ActiveMQ的网站上(http://mng.bz/FNos).
正如你所看到的,这种URI能被用来配置额外的传输连接器。看一下下面的URI,例如:
vm:broker:(tcp://localhost:6000)?brokerName=embeddedbroker&persistent=false
这里,我们定义了一个叫做embeddedBroker的嵌入式代理并配置了一个TCP连接器监听端口6000上的连接。最后,也被设置了不支持持久化。该描述示范了在应用程序内部连接到代理的客户端会使用VM传输,然而外部应用的连接会使用TCP连接器连接嵌入式代理,如同他们在任何独立代理的情况下做的那样。
要使用一个额外的配置文件的嵌入式代理能通过brokerConfig这个传输配置和在URI中配置activemq.xml文件。这里有个例子:
vm://localhost?brokerConfig=xbean:activemq.xml
这个例子会在classpath中使用xbean:协议定位activemq.xml文件。通过这种方法,一个嵌入式代理能像独立代理一样使用xml配置文件进行配置。
现在股票publisher能使用下面的命令在一个嵌入式代理中启动了:
$ mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="vm://localhost CSCO ORCL"
...
Sending: {price=65.713356601409, stock=JAVA, offer=65.779069958011, up=true}
on destination: topic://STOCKS.JAVA
Java application
Broker
vm://
Java appl ications
tcp://
Other applications
exchange messages
with broker using
tcp transport
Figure 4.4 Application
exchanges mess with
embedded broker using vm
transport
Network connectors 81
Sending: {price=66.071605671946, stock=JAVA, offer=66.137677277617, up=true}
on destination: topic://STOCKS.JAVA
Sending: {price=65.929035001620, stock=JAVA, offer=65.994964036622, up=false}
on destination: topic://STOCKS.JAVA
...

注意publisher在没有启动外部代理的情况下工作正常。
VM阐述的一个现在的优点是客户端到代理器的交互提高了性能。同时,你将只有一个java应用运行(一个JVM)而不是两个,这将减轻你的部署过程。这也意味着管理更上的java进程。所以,如果你计划使用的代理主要在一个应用里,可能你应该考虑使用嵌入式代理。嵌入式ActiveMQ会在第8章详细介绍。
在另一方面,如果太多的使用嵌入式代理的java应用存在,当尝试去一致地配置每个代理并备份数据会产生维护问题。在这种情况下,创建一个小型独立代理群比使用嵌入式代理更容易。
一个ActiveMQ代理服务你所有的应用需求适用于大多数的情况。但是一个环境需要更高级特性,比如高可用性和更大的伸缩性。这个可通过代理网来实现。在接下来的章节你会了解到代理网和配置那些网络的网络连接器。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    自己实现的ActiveMQ连接池和新版本ActiveMQ自带的连接池,封装好的工具类,可直接使用

    使用ActiveMQ自带的连接池可以简化开发工作,同时享受到官方优化的性能和稳定性。在使用过程中,开发者可以通过配置参数来调整连接池的行为,如设置最大连接数、最小连接数、连接存活时间等。 在具体使用这些工具类...

    activemq ssl双向认证连接

    在这个场景中,我们将深入探讨如何在Java工程中使用ActiveMQ实现SSL双向认证连接。 首先,让我们了解SSL双向认证的基本概念。在传统的SSL单向认证中,客户端只需要验证服务器的身份,而服务器无需验证客户端。而在...

    ActiveMQ连接和使用测试工程

    2. **连接代码实现**:在Java应用中,使用`org.apache.activemq.ActiveMQConnectionFactory`创建连接工厂,然后通过工厂创建到ActiveMQ服务器的连接。接着,创建会话,再从会话中创建消息消费者和生产者。连接字符串...

    ActiveMQ连接池完整封装实例工具类

    在企业级应用中,为了提高消息处理的效率和稳定性,通常会使用连接池来管理与ActiveMQ服务器的连接。本文将详细介绍如何实现一个ActiveMQ连接池的完整封装实例工具类,并探讨其背后的设计思想。 首先,我们需要了解...

    mqttjs(activemq测试工具)

    在这个例子中,我们连接到ActiveMQ服务器(将`your.active.mq.server`替换为实际的IP地址或域名),订阅了`test/topic`主题,并向该主题发布了一条消息。当收到消息时,控制台会打印出接收到的主题和消息内容。 在...

    WebSocket协议接收ActiveMQ

    2. 客户端连接:客户端通过WebSocket API建立到ActiveMQ的连接,指定目标URL通常是ws://或者wss://(如果是加密连接)加上ActiveMQ服务器的地址和WebSocket端口。 3. 订阅主题或队列:连接建立后,客户端可以订阅想...

    go语言实现使用activemq 收发消息

    启动该程序,你的Go应用就能连接到ActiveMQ,订阅并接收消息,同时也能发送消息到指定队列。 通过这种方式,Go语言可以很好地集成到基于ActiveMQ的消息传递系统中。了解Go的并发模型和错误处理机制,以及STOMP协议...

    ActiveMQ相关jar包--使用Connection连接池

    在这个场景中,我们将关注如何利用ActiveMQ的连接池功能,以优化资源管理和提高性能。 首先,理解`Connection`在ActiveMQ中的角色是至关重要的。一个`Connection`代表到ActiveMQ服务器的物理连接,它可以创建多个`...

    ActiveMQ_使用failover模式进行连接切换时,线程断开

    - **连接断开的原因**:在ActiveMQ的Failover模式中,默认情况下,当检测到连接失败时,会触发一个重新连接的任务。如果该任务被标记为守护线程(daemon thread),则当主线程结束时,守护线程也将随之结束,这可能...

    ActiveMQ之C++与C#通信

    首先,需要安装libactivemq-cpp库,并通过创建`cpp::Connection`对象连接到ActiveMQ服务器。然后,创建`cpp::Session`对象来管理和控制消息的传输,接着创建`cpp::Producer`来发送消息和`cpp::Consumer`来接收消息。...

    ActiveMQ整合Spring使用连接池

    在Spring的XML配置文件中,你可以定义一个`ConnectionFactory` bean,这将使用ActiveMQ的TCP连接工厂。示例配置如下: ```xml <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory...

    ActiveMQ学习笔记之九--发送消息到队列中

    使用`ActiveMQConnectionFactory`创建一个连接工厂,然后使用它创建到ActiveMQ服务器的连接。连接可以通过`Connection`接口的`createSession()`方法来创建会话。 3. **创建会话**: `Session`是线程安全的,用于...

    ActiveMQ高并发处理方案

    然而,在处理大量并发连接和消息时,ActiveMQ可能会遇到性能瓶颈,例如连接资源耗尽、消息处理不均等问题。本文将详细介绍ActiveMQ在高并发环境下的优化策略,包括异常处理、连接池使用、消费者公平调度以及系统整体...

    ActiveMQ——Java连接ActiveMQ

    发布/订阅消息传递域的特点如下:(1)生产者将消息发布到topic中,每个消息可以有多个消费者,属于1:N关系(2)生产者和消费者之间有时间上的相关性,订阅某一个主题的消费者只能消费自它订阅之后发布的消息(3)...

    Activemq-MQTT-Websocket库Js文件mqttws31.js

    4. **事件监听**:监听`connect`、`message`和`error`等事件,以便在连接成功、接收到消息或发生错误时执行相应的处理。 5. **断开连接**:在不再需要与ActiveMQ通信时,记得调用客户端的`disconnect`方法关闭连接...

    ActiveMq安装.docx

    在实际应用中,ActiveMQ的配置可能需要根据具体的业务需求进行调整,例如设置消息持久化、网络连接策略、安全性、日志记录等。消息中间件的核心作用在于提供异步处理、解耦系统组件、实现负载均衡和容错机制。...

    JMS教程+activemq以及activemq和tomcat的整合

    4. **配置Tomcat**: 如果你需要在Tomcat内部运行ActiveMQ,你可以通过添加`server.xml`中的`<Listener>`标签来启动ActiveMQ服务。 5. **编写Java代码**: 使用JMS API创建生产者和消费者,连接到ActiveMQ服务器并发送...

    Spring Boot ActiveMQ连接池配置过程解析

    在本文中,我们将详细介绍Spring Boot ActiveMQ连接池配置过程解析。该配置过程主要解决了Spring Boot ActiveMQ连接池中的频繁创建和销毁连接问题。 为什么需要连接池 在不使用连接池的情况下,每发送一条数据都...

    ActiveMQ-NetCore.zip

    这可能包含了一个简单的应用程序,演示了如何在 .NET Core 应用中连接到 ActiveMQ 服务器并进行消息的发送与接收。 标签 ".Net Core" 指出这是使用 .NET Core 开发的代码,".Net Core mqtt.js" 暗示可能有一个 ...

Global site tag (gtag.js) - Google Analytics