Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这种将JMS基础结构定义到Spring应用程序中的配置到底是如何工作的?_Java_Spring_Spring Mvc_Jms_Spring Jms - Fatal编程技术网

Java 这种将JMS基础结构定义到Spring应用程序中的配置到底是如何工作的?

Java 这种将JMS基础结构定义到Spring应用程序中的配置到底是如何工作的?,java,spring,spring-mvc,jms,spring-jms,Java,Spring,Spring Mvc,Jms,Spring Jms,我在春天做一些关于JMS的练习,我有一些疑问 在一个练习的解决方案中,我有一个名为JmsInfrastructureConfig的配置类: package config; import javax.jms.ConnectionFactory; import javax.jms.Destination; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveM

我在春天做一些关于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的应用程序中,连接对象是从连接工厂获取的

据我阅读文档所知,连接是JMS核心组件之一,用于将消息放入队列\主题,并使用队列\主题中的消息。这个断言是正确的还是错误的

JMS连接是从一个工厂对象获得的,因此在前面的配置类中声明了这个创建并返回特定工厂的bean:

@Bean
public ConnectionFactory connectionFactory(){
    return new ActiveMQConnectionFactory("vm://embedded?broker.persistent=false");
}
这对我来说是很清楚的,但这里我有我的第一个疑问。它创建一个新的ActiveMQConnectionFactory对象,因为它被用作面向消息的中间件

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

什么是vm://embedded?broker.persistent=false?它是代理URL吗?我该如何解释这个地址

然后在JmsInfrastructureConfig类中创建以下两个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创建了一个队列,生产者可以在其中放置消息,消费者可以从中读取消息

这些方法返回一个目标对象,究竟是什么表示这个对象?它是访问队列的网关(其中访问意味着从队列中读写)?还是什么

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

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

是的

什么是vm://embedded?broker.persistent=false

这是你的经纪人,你应该这样解释:

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

是的,这些是你的队列

目的地

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

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

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

apacheactivemq(以及一般的MOM)到底做了什么?它处理队列和主题以及对这些对象的访问

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

完美的解释,太多了