案例:
Springboot 對RabbitMQ的支持
公共的pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.toov5</groupId> <artifactId>RabbitMQProject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <dependencies> <!-- springboot-web組件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 添加springboot對amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <!--fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> </dependencies> </project>
Producer:
controller
package com.toov5.rabbitMQ.comtroller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.toov5.rabbitMQ.Producer.FanoutProducer; @RestController public class MemberProcuderController { @Autowired private FanoutProducer fanoutProducer; @RequestMapping("/sendMsg") public String sendMsg(String queueName) { fanoutProducer.send(queueName); return "success"; } }
config
package com.toov5.rabbitMQ.config; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class FanoutConfig { // 郵件隊列 private String FANOUT_EMAIL_QUEUE = "fanout_eamil_queue"; // 短信隊列 private String FANOUT_SMS_QUEUE = "fanout_sms_queue"; // 短信隊列 private String EXCHANGE_NAME = "fanoutExchange"; // 定義隊列 //郵件隊列 @Bean public Queue fanoutEmailQueue() { return new Queue(FANOUT_EMAIL_QUEUE); } //短信隊列 @Bean public Queue fanoutSMSQueue() { return new Queue(FANOUT_SMS_QUEUE); } //定義交換機 @Bean public FanoutExchange fanoutExchange() { return new FanoutExchange(EXCHANGE_NAME); } //隊列和交換機綁定 參數名稱和定義好的方法名稱一致 @Bean Binding bindingExchangeEamil(Queue fanoutEmailQueue, FanoutExchange fanoutExchange) { return BindingBuilder.bind(fanoutEmailQueue).to(fanoutExchange); } @Bean Binding bindingExchangeSMS(Queue fanoutSMSQueue, FanoutExchange fanoutExchange) { return BindingBuilder.bind(fanoutSMSQueue).to(fanoutExchange); } }
producer
package com.toov5.rabbitMQ.Producer; import java.util.Date; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class FanoutProducer { @Autowired private AmqpTemplate amqpTemplate; public void send(String queueName) { System.out.println("queueName"+queueName); String mString="msg"+new Date(); amqpTemplate.convertAndSend(queueName,mString); //發送消息 } }
yml:
spring: rabbitmq: ####連接地址 host: 192.168.91.6 ####端口號 port: 5672 ####賬號 username: admin ####密碼 password: admin ### 地址 主機獨立的virtualhost virtual-host: /admin_toov5 server: port: 8081
啟動類:
package com.toov5.rabbitMQ; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AppMemberProducer { public static void main(String[] args) { SpringApplication.run(AppMemberProducer.class, args); } }
Producer啟動時候不會創建這個交換機哦,懶加載
啟動后:
Consumer:
EmailConsumer:
package com.toov5.msg.email; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component //注冊到Spring 容器里面 @RabbitListener(queues="fanout_eamil_queue") //監聽 public class EmailConsumer { @RabbitHandler //表示接收消息 public void process(String mString) { System.out.println("郵件消費者獲取生產者消息msg"+mString); } }
SMSConsumer:
package com.toov5.msg.SMS; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component //注冊到Spring 容器里面 @RabbitListener(queues="fanout_sms_queue") //監聽 public class SMSConsumer { @RabbitHandler //表示接收消息 public void process(String mString) { System.out.println("短信消費者獲取生產者消息msg"+mString); } }
啟動類:
package com.toov5.msg; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AppMsgConsumer { public static void main(String[] args) { SpringApplication.run(AppMsgConsumer.class, args); } }
yml:
spring: rabbitmq: ####連接地址 host: 192.168.91.6 ####端口號 port: 5672 ####賬號 username: admin ####密碼 password: admin ### 地址 主機獨立的virtualhost virtual-host: /admin_toov5