Java 这种将JMS基础结构定义到Spring应用程序中的配置到底是如何工作的?
我在春天做一些关于JMS的练习,我有一些疑问 在一个练习的解决方案中,我有一个名为JmsInfrastructureConfig的配置类: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
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-这只是代理的一个参数。这是一个可选参数,如果需要,可以附加更多参数
完美的解释,太多了