rabbitmq 交換模式-Direct

這裏寫圖片描述
direct 模式中 路由鍵 是必須的。

import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
public class Direct {
    public static void main(String[] args) {
        CachingConnectionFactory cf = new CachingConnectionFactory("ip");
        cf.setUsername("root");
        cf.setPassword("");

        RabbitAdmin admin = new RabbitAdmin(cf);

        Queue queue2 = new Queue("q2");

        admin.declareQueue(queue2);

        DirectExchange exchange= new DirectExchange("zdc");
        admin.declareExchange(exchange);
        admin.declareBinding(BindingBuilder.bind(queue2).to(exchange).with("xx"));//聲明xx 爲路由鍵


        // 封裝的模板
        RabbitTemplate template = new RabbitTemplate(cf);
        template.convertAndSend("zdc", "xx", "Hello, world!");


    }
}

綁定後效果:

這裏寫圖片描述

使用 spring 的一個好處就是將依賴轉換到配置文件中。
spring-rabbit 的POM添加到MAVEN中

<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
    <version>1.7.3.RELEASE</version>
</dependency>

spring 配置文件

<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-4.0.xsd 
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit-1.7.xsd">
<rabbit:connection-factory id="connectionFactory"
        host="ip" username="root" password="" />
    <rabbit:admin connection-factory="connectionFactory" />

    <!-- spring template聲明 -->
    <rabbit:template exchange="amqpExchange" id="amqpTemplate"
        connection-factory="connectionFactory" />


    <rabbit:queue name="test_queue_key" ></rabbit:queue>

    <rabbit:queue name="test2"></rabbit:queue>
        <!--聲明 direct 交換模式 -->
    <rabbit:direct-exchange name="amqpExchange">
        <rabbit:bindings>

            <rabbit:binding queue="test_queue_key" key="xx" ></rabbit:binding><!--綁定隊列-->
            <rabbit:binding queue="test2" key='test2'></rabbit:binding>
        </rabbit:bindings>
    </rabbit:direct-exchange>
    </beans>

這樣的話 ,發送代碼就比較簡單了

AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("rabbit.xml");
        RabbitTemplate template = ctx.getBean(RabbitTemplate.class);
        template.convertAndSend("xx","hello");// 第一個參數爲路由鍵,第二個參數爲實際發送的消息。

        Thread.sleep(1000);
        ctx.destroy();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章