这个将JMS基础设施定义为Spring应用程序的配置究竟是如何工作的



我在Spring中做了一些关于JMS的练习,我有一些疑问。

在一个练习的解决方案中,我有一个名为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获得的。

根据我阅读文档的理解,ConnectionJMS核心组件之一,它用于将消息放入队列\主题和使用队列\主题中的消息。这个断言是真的还是错的?

JMSConnection是从factory对象获得的,因此在以前的配置类中声明了创建并返回特定工厂的bean:

@Bean
public ConnectionFactory connectionFactory(){
    return new ActiveMQConnectionFactory("vm://embedded?broker.persistent=false");
}

这对我来说很清楚,但在这里我有了第一个疑问。它创建了一个新的ActiveMQConnectionFactory对象,因为它被Apache Active MQ用作面向消息的中间件

Apache Active MQ(以及通常的MOM)究竟是什么?它处理队列和主题以及对这些对象的访问?)。

vm://究竟嵌入了什么?broker.spersistent=false?是经纪人的URL吗?我该如何准确地解释这个地址?

然后在JmsInfrastructureConfig类中创建以下2个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");
}

两者都创建了一个特定的队列,分别命名为:奖励。队列。用餐奖赏。队列。确认(我认为这些是队列名称,还是不是?)

因此,这些bean创建了一个队列,生产者可以在其中放置消息,消费者可以从中读取消息。

这些方法返回一个Destination对象,该对象的具体表示方法是什么?它是访问队列的网关吗(其中访问意味着从队列读取时写入)?还是怎样

另一个疑问是:为什么在这个应用程序的体系结构中,返回ConnectionFactory的bean的声明与创建队列的bean在同一个类中?

它是否用于将消息放入队列\主题并消费?

是的。

vm://究竟嵌入了什么?broker.spersistent=错误

这是你的brokerURL,这就是你应该如何解释它:

  • vm-这是您的协议,意味着虚拟机(就像您使用嵌入式代理一样,在您自己的应用程序中运行)
  • embedded-这是你的brokerName,所以现在你有了一个名为"embedded"的嵌入式broker(有点混乱)
  • ?broker.spersistent=false-这只是您的broker的一个参数。这是一个可选参数,如果需要,可以附加更多

我认为这些是队列名称

是的,这些是您的队列。

目的地

这是您可以用来访问队列的对象。通过使用它,您可以生成(发送)或使用(读取)消息。

为什么在这个应用程序的体系结构中,返回ConnectionFactory的bean声明与创建队列的bean定义在同一个类中?

他们不一定在同一个班级。然而,这个例子的目的是尽可能简单,所以它会当场为您创建这些队列,这样您就可以使用它

Apache Active MQ(以及一般的MOM)究竟是什么?它处理队列和主题以及对这些对象的访问?)。

我认为这个问题太宽泛了,无法回答。如果你需要一个非常高层次的解释,你可能应该先读一些东西,比如:消息代理

最新更新