SpringBoot2.0之整合RabbitMQ
阿新 • • 發佈:2018-11-12
案例:
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; @RestControllerpublic class MemberProcuderController { @Autowired private FanoutProducer fanoutProducer; @RequestMapping("/sendMsg") public String sendMsg(String queueName) { fanoutProducer.send(queueName); return "success"; } }
config
package com.toov5.rabbitMQ.config; importorg.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