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();