Spring整合RabbitMQ
需要依赖的jar包
/* RabbitMQ of Gradle */ compile("com.rabbitmq:amqp-client:5.1.2") compile("org.springframework.amqp:spring-rabbit:2.0.1.RELEASE") /* RabbitMQ of Maven*/ <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.1.2</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>2.0.1.RELEASE</version> </dependency>
direct交换器
<?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.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"> <description>Spring RabbitMQ 整合配置</description> <!-- virtual-host:虚拟主机,用于权限管理,默认为 / --> <rabbit:connection-factory id="connectionFactory" host="192.168.41.128" port="5672" username="admin" password="admin" virtual-host="/"/> <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成--> <rabbit:admin connection-factory="connectionFactory"/> <!-- 咨询订单创建成功 --> <rabbit:queue id="q_consult_create_id" name="q_consult_create_name" durable="true" auto-delete="false" exclusive="false"/> <!-- 咨询订单支付成功 --> <rabbit:queue id="q_order_pay_id" name="q_order_pay_name" durable="true" auto-delete="false" exclusive="false"/> <!-- direct exchange --> <rabbit:direct-exchange name="myDirectExchangeName" id="myDirectExchangeId"> <rabbit:bindings> <rabbit:binding queue="q_consult_create_id" key="q_consult_create_routeKey"/> <rabbit:binding queue="q_order_pay_id" key="q_order_pay_routeKey"/> </rabbit:bindings> </rabbit:direct-exchange> <!-- spring amqpTemplate声明,此处exchange不能使用id指定 --> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myDirectExchangeName"/> <!-- 消费者 --> <bean id="consumerListener" class="cn.gov.wu.rabbit.ConsumerListener"/> <rabbit:listener-container connection-factory="connectionFactory"> <!-- 使用queues或者queue-names都可以 --> <rabbit:listener ref="consumerListener" method="receiveMsg" queues="q_consult_create_id,q_order_pay_id"/> <!--<rabbit:listener ref="consumerListener" method="receiveMsg" queue-names="q_consult_create_name,q_order_pay_name"/>--> </rabbit:listener-container> </beans>
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rabbitmq-config-direct.xml"); AmqpTemplate amqpTemplate = context.getBean("amqpTemplate", AmqpTemplate.class); String routingKey = "q_consult_create_routeKey"; amqpTemplate.convertAndSend(routingKey, "给队列 q_consult_create 发送消息"); routingKey = "q_order_pay_routeKey"; amqpTemplate.convertAndSend(routingKey, "给队列 q_order_pay 发送消息"); context.close();
topic交换器
特别注意:发往topic转发器的消息不能随意的设置选择键(routing_key),必须是由点隔开的一系列的标识符组成。
<?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.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"> <description>Spring RabbitMQ 整合配置</description> <!-- virtual-host:虚拟主机,用于权限管理,默认为 / --> <rabbit:connection-factory id="connectionFactory" host="192.168.41.128" port="5672" username="admin" password="admin" virtual-host="/"/> <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成--> <rabbit:admin connection-factory="connectionFactory"/> <!-- 咨询订单创建成功 --> <rabbit:queue id="q_topic_consult_create_id" name="q_topic_consult_create_name" durable="false" auto-delete="false" exclusive="false"/> <!-- 咨询订单支付成功 --> <rabbit:queue id="q_topic_order_pay_id" name="q_topic_order_pay_name" durable="false" auto-delete="false" exclusive="false"/> <!-- topic exchange --> <rabbit:topic-exchange name="myTopicExchangeName" id="myTopicExchangeId" durable="false"> <rabbit:bindings> <rabbit:binding pattern="#.create.*.routeKey" queue="q_topic_consult_create_id"/> <rabbit:binding pattern="q.*.*.routeKey" queue="q_topic_order_pay_id"/> </rabbit:bindings> </rabbit:topic-exchange> <!-- spring amqpTemplate声明,此处exchange不能使用id指定 --> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myTopicExchangeName"/> <!-- 消费者 --> <bean id="consumerListener" class="cn.gov.wu.rabbit.ConsumerListener"/> <rabbit:listener-container connection-factory="connectionFactory"> <!-- 使用queues或者queue-names都可以 --> <rabbit:listener ref="consumerListener" method="receiveMsg" queues="q_topic_consult_create_id,q_topic_order_pay_id"/> </rabbit:listener-container> </beans>
// 发往topic转发器的消息不能随意的设置选择键(routing_key),必须是由点隔开的一系列的标识符组成 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rabbitmq-config-topic.xml"); AmqpTemplate amqpTemplate = context.getBean("amqpTemplate", AmqpTemplate.class); String exchangeName = "myTopicExchangeName"; String routingKey1 = "a.create.consult.routeKey"; String routingKey2 = "q.create.consult.routeKey"; amqpTemplate.convertAndSend(exchangeName, routingKey1, "给exchange myTopicExchangeName 发送消息, routeKey为 a.create.consult.routeKey"); amqpTemplate.convertAndSend(exchangeName, routingKey2, "给exchange myTopicExchangeName 发送消息, routeKey为 b.create.consult.routeKey"); String routingKey3 = "q.order.pay.routeKey"; amqpTemplate.convertAndSend(exchangeName, routingKey3, "给exchange myTopicExchangeName 发送消息, routeKey为 q.order.pay.routeKe"); context.close();
fanout交换器
<?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.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"> <description>Spring RabbitMQ 整合配置</description> <!-- virtual-host:虚拟主机,用于权限管理,默认为 / --> <rabbit:connection-factory id="connectionFactory" host="192.168.41.128" port="5672" username="admin" password="admin" virtual-host="/"/> <!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成--> <rabbit:admin connection-factory="connectionFactory"/> <!-- 咨询订单创建成功 --> <rabbit:queue id="q_fanout_consult_create_id" name="q_topic_consult_create_name" durable="false" auto-delete="false" exclusive="false"/> <!-- 咨询订单支付成功 --> <rabbit:queue id="q_fanout_order_pay_id" name="q_topic_order_pay_name" durable="false" auto-delete="false" exclusive="false"/> <!-- fanout exchange --> <rabbit:fanout-exchange name="myFanoutExchangeName" id="myFanoutExchangeId"> <rabbit:bindings> <rabbit:binding queue="q_fanout_consult_create_id"/> <rabbit:binding queue="q_fanout_order_pay_id"/> </rabbit:bindings> </rabbit:fanout-exchange> <!-- spring amqpTemplate声明,此处exchange不能使用id指定 --> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="myFanoutExchangeName"/> <!-- 消费者 --> <bean id="consumerListener" class="cn.gov.wu.rabbit.ConsumerListener"/> <rabbit:listener-container connection-factory="connectionFactory"> <!-- 使用queues或者queue-names都可以 --> <rabbit:listener ref="consumerListener" method="receiveMsg" queues="q_fanout_consult_create_id,q_fanout_order_pay_id"/> </rabbit:listener-container> </beans>
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/rabbitmq-config-fanout.xml"); AmqpTemplate amqpTemplate = context.getBean("amqpTemplate", AmqpTemplate.class); amqpTemplate.convertAndSend("发送fanout消息"); context.close();
相关推荐
zhuxue 2020-10-14
shenzhenzsw 2020-10-09
shyoldboy 2020-09-27
leihui00 2020-09-16
lishijian 2020-08-17
程序员伊成 2020-08-06
ljcsdn 2020-07-27
waitzkj 2020-07-25
powrexly 2020-07-20
liym 2020-07-20
zhoucheng0 2020-07-19
shenzhenzsw 2020-07-18
woaishanguosha 2020-07-18
waitzkj 2020-07-18
zhoucheng0 2020-07-08
json0000 2020-07-04
NVEFLY 2020-07-04
OnMyHeart 2020-07-04