Rabbbitmq xml配置

Rabbbitmq xml配置,xml,spring-rabbit,Xml,Spring Rabbit,我试图理解RabbitMQ-Spring AMQP代码。在XML文件中配置RabbitMQ的情况下,我没有什么疑问 xml的发送方部分如下所示- <?xml version="1.0" encoding="utf-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rab

我试图理解RabbitMQ-Spring AMQP代码。在XML文件中配置RabbitMQ的情况下,我没有什么疑问

xml的发送方部分如下所示-

 <?xml version="1.0" encoding="utf-8" ?>
 <beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:rabbit="http://www.springframework.org/schema/rabbit"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
  http://www.springframework.org/schema/rabbit 
  http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">

<rabbit:connection-factory id="connectionFactory" 
host="localhost" username="guest" password="guest"/>

<rabbit:admin connection-factory="connectionFactory"/>

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
exchange="tpExchange"/> 
</beans>
public class SpringAMQPRabbitSender {
    private final static String SENDER_XML = "springamqp-rabbit-sender-         context.xml";
    public static void main(String[] args) throws Exception {
  AmqpTemplate amqpTemplate = (AmqpTemplate)(new ClassPathXmlApplicationContext(SENDER_XML)).getBean("amqpTemplate");
  int messagCount = 0;
  while (messagCount < 10){
    amqpTemplate.convertAndSend("tp.routingkey.1", "Message # " + messagCount++);
  }
  System.out.println( messagCount + " message(s) sent successfully.");
}

发送方代码如下所示-

 <?xml version="1.0" encoding="utf-8" ?>
 <beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:rabbit="http://www.springframework.org/schema/rabbit"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
  http://www.springframework.org/schema/rabbit 
  http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">

<rabbit:connection-factory id="connectionFactory" 
host="localhost" username="guest" password="guest"/>

<rabbit:admin connection-factory="connectionFactory"/>

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
exchange="tpExchange"/> 
</beans>
public class SpringAMQPRabbitSender {
    private final static String SENDER_XML = "springamqp-rabbit-sender-         context.xml";
    public static void main(String[] args) throws Exception {
  AmqpTemplate amqpTemplate = (AmqpTemplate)(new ClassPathXmlApplicationContext(SENDER_XML)).getBean("amqpTemplate");
  int messagCount = 0;
  while (messagCount < 10){
    amqpTemplate.convertAndSend("tp.routingkey.1", "Message # " + messagCount++);
  }
  System.out.println( messagCount + " message(s) sent successfully.");
}
公共类SpringAMQPRabbitSender{
私有最终静态字符串SENDER_XML=“springamqp rabbit SENDER-context.XML”;
公共静态void main(字符串[]args)引发异常{
AmqpTemplate AmqpTemplate=(AmqpTemplate)(新类路径XmlApplicationContext(发送方XML)).getBean(“AmqpTemplate”);
int messagCount=0;
而(MessaCount<10){
amqpTemplate.convertAndSend(“tp.routingkey.1”、“Message#“+messagCount++”);
}
System.out.println(MessaCount+“已成功发送消息”);
}
接收方xml部分如图所示

<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:rabbit="http://www.springframework.org/schema/rabbit"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
  http://www.springframework.org/schema/rabbit
  http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">

<rabbit:connection-factory id="connectionFactory" host="localhost" 
          username="guest" password="guest"/>

<rabbit:admin connection-factory="connectionFactory"/>
<rabbit:queue id ="tpQueue"/>

<rabbit:topic-exchange id="tpExchange" name="tpExchange">
    <rabbit:bindings>
        <rabbit:binding queue="tpQueue" pattern="tp.routingkey.1">
        </rabbit:binding>
    </rabbit:bindings>
</rabbit:topic-exchange>

<bean id="asyncListener" class="com.tp.spring_amqp_rabbitmq.SpringAMQPRabbitAyncListener"/>

<rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory">
    <rabbit:listener ref="asyncListener" queue-names="tpQueue"/>
</rabbit:listener-container>

</beans>

发件人代码中convertAndSend()的参数给出了发件人使用的路由密钥和要发送的邮件。但它要发送到哪个交易所?? 我的疑问是:

  • 发送方使用哪个交换发送消息?它是xml文件中标记中指定的交换吗

  • 如果是,则在tag-exchange=“tpExchange”中指定交换的名称或交换的id

  • 在接收方xml中的标记中,“tpQueue”是队列的id还是队列的名称

  • 4.此外,由于接收方xml中的标记没有名称,因此该代码是否使用匿名队列

    请帮忙。在少数几个网站上找过……没有多少信息。 谢谢

  • 元素中,需要的是exchange名称,而不是id

  • 由于队列没有名称,因此使用自动删除匿名队列

    元素中,必须使用
    队列
    属性而不是
    队列名称
    属性来引用此类队列。如果要使用
    队列名称
    属性,必须为队列指定名称


    请参阅XSD文档。

    有人能帮我理解这一点吗?非常感谢。这对我帮助很大:)但我遇到了一些代码,它们在侦听器中使用“队列”,但它指的是队列名称,因为标记没有id。例如:这是正确的方法吗,即使用“队列”在侦听器中,包含队列名称作为其属性值