这个将 JMS 基础结构定义到 Spring 应用程序中的配置到底是如何工作的?
How exactly works this configuration that definies the JMS infrastracture into a Spring application?
我正在 Spring 做一些关于 JMS 的练习,我有一些疑问。
进入一个练习的解决方案我有这个配置class命名为JmsInfrastructureConfig:
package config;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JmsInfrastructureConfig {
/**
* Create a ConnectionFactory using ActiveMQ:
*/
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory("vm://embedded?broker.persistent=false");
}
/**
* Create a Queue for Dining objects using ActiveMQ:
*/
@Bean
public Destination diningQueue() {
return new ActiveMQQueue("rewards.queue.dining");
}
/**
* Create a Queue for Confirmation objects using ActiveMQ:
*/
@Bean
public Destination confirmationQueue() {
return new ActiveMQQueue("rewards.queue.confirmation");
}
}
我知道在基于 JMS 的应用程序中,Connection 对象是从 ConnectionFactory.
获得的
根据我阅读文档的理解,Connection 是 JMS 核心组件之一,它用于将消息放入queue\topic 并使用来自 queue\topic 的消息。这个断言是正确的还是错误的断言?
JMS Connection是从factory对象中获取的,所以在之前的配置中class声明了这个bean创建并 return 特定工厂:
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory("vm://embedded?broker.persistent=false");
}
这对我来说很清楚,但在这里我有第一个疑问。它创建一个新的 ActiveMQConnectionFactory 对象,因为它被用作 Apache Active MQ 作为 Message Oriented Middleware.
Apache Active MQ(以及一般的 MOM)究竟做了什么?它处理队列和主题以及对这些对象的访问?)。
vm://embedded 到底是什么?broker.persistent=false?是经纪人URL吗?我该如何解释这个地址?
然后进入 JmsInfrastructureConfig class 创建这两个 bean:
// Create a Queue for Dining objects using ActiveMQ:
@Bean
public Destination diningQueue() {
return new ActiveMQQueue("rewards.queue.dining");
}
// Create a Queue for Confirmation objects using ActiveMQ:
@Bean
public Destination confirmationQueue() {
return new ActiveMQQueue("rewards.queue.confirmation");
}
两者都创建了一个特定的队列,分别命名为:rewards.queue.dining和rewards.queue.confirmation (我认为这些是队列名称,对吗?)
所以这些 bean 创建了一个队列,生产者可以在其中放置消息,而消费者可以从中读取消息。
这些方法return一个Destination对象,这个对象到底代表什么?它是访问队列的网关(访问意味着从队列中读取时写入)?或者什么?
另一个疑问是:为什么在这个应用程序的结构中,return a ConnectionFactory 的 bean 声明在同一个 class 中定义了创建队列的 bean?
Is it used to put messages into a queue\topic and to consume?
是的,是的。
What exactly is vm://embedded?broker.persistent=false
这是您的 brokerURL,您应该这样解释它:
- vm - 这是您的协议,意思是虚拟机(因为您使用的是嵌入式代理,运行 在您自己的应用程序中)
- embedded - 这是您的 brokerName,所以现在您有一个名为 "embedded" 的嵌入式代理(有点令人困惑)
- ?broker.persistent=false - 这只是您的经纪人的一个参数。这是一个可选参数,如果需要,您可以附加更多
I think that these are the queues name
是的,这些是你的队列。
Destination
这是您可以用来访问队列的对象。通过使用它,您可以生成(发送)或使用(读取)消息。
why in the architecture of this application the declaration of the bean that return a ConnectionFactory is in the same class where are defined the beans that creats queues?
他们不一定在同一个class。然而,该示例旨在尽可能简单,因此它会在现场为您创建这些队列,以便您可以使用它。
What exactly do Apache Active MQ (and a MOM in general)? It handle the queues and topics and the access to these objects?).
我认为这个问题太宽泛了,无法回答。如果您需要非常高层次的解释,您可能应该先阅读一些内容,如下所示:
Message broker
我正在 Spring 做一些关于 JMS 的练习,我有一些疑问。
进入一个练习的解决方案我有这个配置class命名为JmsInfrastructureConfig:
package config;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JmsInfrastructureConfig {
/**
* Create a ConnectionFactory using ActiveMQ:
*/
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory("vm://embedded?broker.persistent=false");
}
/**
* Create a Queue for Dining objects using ActiveMQ:
*/
@Bean
public Destination diningQueue() {
return new ActiveMQQueue("rewards.queue.dining");
}
/**
* Create a Queue for Confirmation objects using ActiveMQ:
*/
@Bean
public Destination confirmationQueue() {
return new ActiveMQQueue("rewards.queue.confirmation");
}
}
我知道在基于 JMS 的应用程序中,Connection 对象是从 ConnectionFactory.
获得的根据我阅读文档的理解,Connection 是 JMS 核心组件之一,它用于将消息放入queue\topic 并使用来自 queue\topic 的消息。这个断言是正确的还是错误的断言?
JMS Connection是从factory对象中获取的,所以在之前的配置中class声明了这个bean创建并 return 特定工厂:
@Bean
public ConnectionFactory connectionFactory(){
return new ActiveMQConnectionFactory("vm://embedded?broker.persistent=false");
}
这对我来说很清楚,但在这里我有第一个疑问。它创建一个新的 ActiveMQConnectionFactory 对象,因为它被用作 Apache Active MQ 作为 Message Oriented Middleware.
Apache Active MQ(以及一般的 MOM)究竟做了什么?它处理队列和主题以及对这些对象的访问?)。
vm://embedded 到底是什么?broker.persistent=false?是经纪人URL吗?我该如何解释这个地址?
然后进入 JmsInfrastructureConfig class 创建这两个 bean:
// Create a Queue for Dining objects using ActiveMQ:
@Bean
public Destination diningQueue() {
return new ActiveMQQueue("rewards.queue.dining");
}
// Create a Queue for Confirmation objects using ActiveMQ:
@Bean
public Destination confirmationQueue() {
return new ActiveMQQueue("rewards.queue.confirmation");
}
两者都创建了一个特定的队列,分别命名为:rewards.queue.dining和rewards.queue.confirmation (我认为这些是队列名称,对吗?)
所以这些 bean 创建了一个队列,生产者可以在其中放置消息,而消费者可以从中读取消息。
这些方法return一个Destination对象,这个对象到底代表什么?它是访问队列的网关(访问意味着从队列中读取时写入)?或者什么?
另一个疑问是:为什么在这个应用程序的结构中,return a ConnectionFactory 的 bean 声明在同一个 class 中定义了创建队列的 bean?
Is it used to put messages into a queue\topic and to consume?
是的,是的。
What exactly is vm://embedded?broker.persistent=false
这是您的 brokerURL,您应该这样解释它:
- vm - 这是您的协议,意思是虚拟机(因为您使用的是嵌入式代理,运行 在您自己的应用程序中)
- embedded - 这是您的 brokerName,所以现在您有一个名为 "embedded" 的嵌入式代理(有点令人困惑)
- ?broker.persistent=false - 这只是您的经纪人的一个参数。这是一个可选参数,如果需要,您可以附加更多
I think that these are the queues name
是的,这些是你的队列。
Destination
这是您可以用来访问队列的对象。通过使用它,您可以生成(发送)或使用(读取)消息。
why in the architecture of this application the declaration of the bean that return a ConnectionFactory is in the same class where are defined the beans that creats queues?
他们不一定在同一个class。然而,该示例旨在尽可能简单,因此它会在现场为您创建这些队列,以便您可以使用它。
What exactly do Apache Active MQ (and a MOM in general)? It handle the queues and topics and the access to these objects?).
我认为这个问题太宽泛了,无法回答。如果您需要非常高层次的解释,您可能应该先阅读一些内容,如下所示: Message broker