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