标签:delete framework shm result 定义 and mon 弊端 要求
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.2.2.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.yuan</groupId> 12 <artifactId>rabbitmq03</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>rabbitmq03</name> 15 <packaging>pom</packaging> 16 <description>Demo project for Spring Boot</description> 17 18 <properties> 19 <java.version>1.8</java.version> 20 </properties> 21 22 <modules> 23 <module>rabbitmq-provider</module> 24 <module>rabbitmq-consumer</module> 25 </modules> 26 27 <dependencies> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-amqp</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>junit</groupId> 34 <artifactId>junit</artifactId> 35 <scope>test</scope> 36 </dependency> 37 <dependency> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-starter-web</artifactId> 40 </dependency> 41 42 <dependency> 43 <groupId>org.projectlombok</groupId> 44 <artifactId>lombok</artifactId> 45 <version>1.18.10</version> 46 <scope>provided</scope> 47 </dependency> 48 49 </dependencies> 50 51 <build> 52 <plugins> 53 <plugin> 54 <groupId>org.springframework.boot</groupId> 55 <artifactId>spring-boot-maven-plugin</artifactId> 56 </plugin> 57 </plugins> 58 </build> 59 60 </project>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <parent> 7 <groupId>com.yuan</groupId> 8 <artifactId>rabbitmq03</artifactId> 9 <version>0.0.1-SNAPSHOT</version> 10 </parent> 11 <artifactId>rabbitmq-provider</artifactId> 12 <version>0.0.1-SNAPSHOT</version> 13 <name>rabbitmq-provider</name> 14 <description>子模块-生产者</description> 15 <packaging>jar</packaging> 16 </project>
QueueDelayConfig
1 package com.yuan.rabbitmqprovider.rabbitmq; 2 3 4 import org.springframework.amqp.core.Binding; 5 import org.springframework.amqp.core.BindingBuilder; 6 import org.springframework.amqp.core.DirectExchange; 7 import org.springframework.amqp.core.Queue; 8 import org.springframework.context.annotation.Bean; 9 import org.springframework.context.annotation.Configuration; 10 11 import javax.lang.model.element.NestingKind; 12 import java.util.HashMap; 13 import java.util.Map; 14 15 @Configuration 16 public class QueueDelayConfig { 17 18 /** 19 * 定义正常的队列、交换机、路由键 20 */ 21 public static final String NORMAL_QUEUE="normal-queue"; 22 public static final String NORMAL_EXCHANGE="normal-exchange"; 23 public static final String NORMAL_ROUTINGKEY="normal-routingkey"; 24 25 /** 26 * 定义死信的队列、交换机、路由键 27 */ 28 public static final String DELAY_QUEUE="delay-queue"; 29 public static final String DELAY_EXCHANGE="delay-exchange"; 30 public static final String DELAY_ROUTINGKEY="delay-routingkey"; 31 32 33 /** 34 * 定义正常队列 35 * @return 36 */ 37 @Bean 38 public Queue normalQueue(){ 39 //设定消息过期时间/死信交换机/死信路由键3个参数 40 Map<String, Object> map = new HashMap<String, Object>(); 41 map.put("x-message-ttl", 15000);//message在该队列queue的存活时间最大为15秒 42 map.put("x-dead-letter-exchange", DELAY_EXCHANGE); //x-dead-letter-exchange参数是设置该队列的死信交换器(DLX) 43 map.put("x-dead-letter-routing-key", DELAY_ROUTINGKEY);//x-dead-letter-routing-key参数是给这个DLX指定路由键 44 45 return new Queue(NORMAL_QUEUE, true, false, false, map); 46 } 47 48 @Bean 49 public DirectExchange normalExchange(){ 50 return new DirectExchange(NORMAL_EXCHANGE, true, false); 51 } 52 53 @Bean 54 public Binding normalRoutingkey(){ 55 return BindingBuilder.bind(normalQueue()) 56 .to(normalExchange()) 57 .with(NORMAL_ROUTINGKEY); 58 } 59 60 61 /** 62 * 定义死信队列 63 */ 64 @Bean 65 public Queue delayQueue(){ 66 return new Queue(DELAY_QUEUE, true); 67 } 68 69 @Bean 70 public DirectExchange delayExchange(){ 71 return new DirectExchange(DELAY_EXCHANGE); 72 } 73 74 @Bean 75 public Binding delayRoutingkey(){ 76 return BindingBuilder.bind(delayQueue()) 77 .to(delayExchange()) 78 .with(DELAY_ROUTINGKEY); 79 } 80 81 82 83 84 }
SendController
1 package com.yuan.rabbitmqprovider.controller; 2 3 4 import com.yuan.rabbitmqprovider.rabbitmq.QueueDelayConfig; 5 import lombok.extern.slf4j.Slf4j; 6 import org.springframework.amqp.rabbit.core.RabbitTemplate; 7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RestController; 10 11 import java.time.LocalDateTime; 12 import java.time.format.DateTimeFormatter; 13 import java.util.HashMap; 14 import java.util.Map; 15 16 @RestController 17 @Slf4j 18 public class SendController { 19 20 @Autowired 21 private RabbitTemplate rabbitTemplate; 22 23 @RequestMapping("/sender") 24 public Map<String, Object> sender(){ 25 Map<String, Object> data = this.createData(); 26 27 rabbitTemplate.convertAndSend(QueueDelayConfig.NORMAL_EXCHANGE, 28 QueueDelayConfig.NORMAL_ROUTINGKEY,data); 29 Map<String, Object> result = new HashMap<String, Object>(); 30 result.put("msg","OK"); 31 result.put("code","1"); 32 return result; 33 } 34 35 36 37 private Map<String, Object> createData(){ 38 Map<String, Object> map = new HashMap<String, Object>(); 39 40 String date = LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE. 41 ofPattern("yyyy-MM-dd HH:mm:ss")); 42 map.put("msg","hello rabbitmq!!"); 43 map.put("success",true); 44 map.put("createdate", date); 45 46 47 return map; 48 } 49 50 51 52 }
1 server: 2 port: 8081 3 servlet: 4 context-path: /rabbitmq-provider 5 spring: 6 rabbitmq: 7 virtual-host: / 8 username: guest 9 password: guest 10 host: 192.168.238.129 11 port: 5672
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>com.yuan</groupId> 7 <artifactId>rabbitmq03</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 </parent> 10 <artifactId>rabbitmq-consumer</artifactId> 11 <version>0.0.1-SNAPSHOT</version> 12 <name>rabbitmq-consumer</name> 13 <description>子模块-消费者</description> 14 <packaging>jar</packaging> 15 </project>
1 package com.yuan.rabbitmqconsumer.controller; 2 3 import lombok.extern.slf4j.Slf4j; 4 import org.springframework.amqp.rabbit.annotation.RabbitHandler; 5 import org.springframework.amqp.rabbit.annotation.RabbitListener; 6 import org.springframework.stereotype.Component; 7 8 import java.util.Map; 9 10 @Component 11 @Slf4j 12 @RabbitListener(queues = {"delay-queue"}) //消费端监听队列,如果delay-queue死信队列中有消息过来就会被消费掉 13 public class QueueRecevier { 14 15 @RabbitHandler 16 public void handlerMessage(Map<String, Object> data){ 17 log.info("QueueRecevier.handlerMessage,data={}",data); 18 } 19 20 21 22 23 }
标红处的log使用需要下载一个插件Lombok
直接右边install, 然后重启idea
1 server: 2 port: 8082 3 servlet: 4 context-path: /rabbitmq-consumer 5 spring: 6 rabbitmq: 7 virtual-host: / 8 username: guest 9 password: guest 10 host: 192.168.238.129 11 port: 5672
启动消费端,消费端会根据我们设定的监听去监听队列中是否有消息有则会被消费掉。。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>com.yuan</groupId> 7 <artifactId>rabbitmq03</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 </parent> 10 <artifactId>common-vo</artifactId> 11 <version>0.0.1-SNAPSHOT</version> 12 <name>common-vo</name> 13 <packaging>jar</packaging> 14 <description>公共子模块</description> 15 16 17 18 </project>
创建一个model的Package,创建一个Order
package com.yuan.commonvo.model; import lombok.Data; import java.lang.reflect.ParameterizedType; import java.util.Date; @Data public class Order { private long orderId; private String orderNo; private Date createdate; }
vo包下创建一个OrderVo
package com.yuan.commonvo.vo; import com.yuan.commonvo.model.Order; public class OrderVo extends Order { }
完了之后在父模块中添加common-vo子模块的一个pom依赖
<modules> <module>rabbitmq-provider</module> <module>rabbitmq-consumer</module> <module>common-vo</module> </modules>
<dependency>
<groupId>com.yuan</groupId>
<artifactId>common-vo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
修改生产者SendController
@RequestMapping("/sender") public Map<String, Object> sender(){ // Map<String, Object> data = this.createData(); OrderVo orderVo = new OrderVo(); orderVo.setOrderId(1); orderVo.setOrderNo("P001"); rabbitTemplate.convertAndSend(QueueDelayConfig.NORMAL_EXCHANGE, QueueDelayConfig.NORMAL_ROUTINGKEY,orderVo); Map<String, Object> result = new HashMap<String, Object>(); result.put("msg","OK"); result.put("code","1"); return result; }
添加QueueProviderMessageConvert
package com.yuan.rabbitmqprovider.rabbitmq;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueProviderMessageConvert {
@Bean
public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory){
RabbitTemplate rabbitTemplate=new RabbitTemplate();
rabbitTemplate.setConnectionFactory(connectionFactory);
rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter());
return rabbitTemplate;
}
@Bean
public Jackson2JsonMessageConverter jackson2JsonMessageConverter(){
return new Jackson2JsonMessageConverter();
}
}
修改消费端QueueRecevier
package com.yuan.rabbitmqconsumer.controller; import com.yuan.commonvo.vo.OrderVo; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component @Slf4j @RabbitListener(queues = {"delay-queue"}) //消费端监听队列,如果delay-queue死信队列中有消息过来就会被消费掉 public class QueueRecevier { @RabbitHandler public void handlerMessage(OrderVo orderVo){ log.info("QueueRecevier.handlerMessage,data={}",orderVo); } }
添加消费端QueueRecevierMessageConvert
package com.yuan.rabbitmqconsumer.controller;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QueueRecevierMessageConvert {
@Bean
public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory){
RabbitTemplate rabbitTemplate=new RabbitTemplate();
rabbitTemplate.setConnectionFactory(connectionFactory);
rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter());
return rabbitTemplate;
}
@Bean
public Jackson2JsonMessageConverter jackson2JsonMessageConverter(){
return new Jackson2JsonMessageConverter();
}
}
标签:delete framework shm result 定义 and mon 弊端 要求
原文地址:https://www.cnblogs.com/ly-0919/p/12103054.html