1. 程式人生 > >SpringBoot2.0之整合RabbitMQ

SpringBoot2.0之整合RabbitMQ

案例:

 

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