All Projects → lonyee1989 → Lemon Rabbitmq

lonyee1989 / Lemon Rabbitmq

Licence: apache-2.0
乐檬框架之rabbitMQ的解耦实现方式(基于springboot框架),利用ConfirmCallback确保消息安全发送至broker服务器,使用Ack/Nack手动确认消息处理状态,保证broker消息被正确消费

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Lemon Rabbitmq

smart-cloud-examples
基于springcloud的脚手架(smart-cloud)示例,支持服务合并部署与拆分部署、接口加解密签名、日志数据脱敏、接口数据mock、接口文档自动生成、请求幂等校验、接口日志&&sql日志切面打印、分表分库分布式事务等
Stars: ✭ 23 (-50%)
Mutual labels:  rabbitmq, springboot
Benthos
Fancy stream processing made operationally mundane
Stars: ✭ 3,705 (+7954.35%)
Mutual labels:  rabbitmq, message-queue
Rebus.RabbitMq
🚌 RabbitMQ transport for Rebus
Stars: ✭ 51 (+10.87%)
Mutual labels:  rabbitmq, message-queue
vm-engine
vm-engine为“微视频”网站的后端,java语言开发。涉及技术包括,springboot,springcloud,mybaties,docker,websocket,rabbitmq,redis等。
Stars: ✭ 57 (+23.91%)
Mutual labels:  rabbitmq, springboot
Spring Boot Examples
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。
Stars: ✭ 26,812 (+58186.96%)
Mutual labels:  springboot, rabbitmq
Java-CS-Record
记录准备春招实习过程中,学习与复习的知识(模块化整理,非面试题速成)。注:暂停更新,后续请移步博客
Stars: ✭ 73 (+58.7%)
Mutual labels:  rabbitmq, springboot
Watchman
A simple message queue callback center
Stars: ✭ 271 (+489.13%)
Mutual labels:  rabbitmq, message-queue
Spring-Boot-2
Spring Boot 2.x examples
Stars: ✭ 33 (-28.26%)
Mutual labels:  rabbitmq, springboot
Plumber
A swiss army knife CLI tool for interacting with Kafka, RabbitMQ and other messaging systems.
Stars: ✭ 514 (+1017.39%)
Mutual labels:  rabbitmq, message-queue
Pdf
编程电子书,电子书,编程书籍,包括C,C#,Docker,Elasticsearch,Git,Hadoop,HeadFirst,Java,Javascript,jvm,Kafka,Linux,Maven,MongoDB,MyBatis,MySQL,Netty,Nginx,Python,RabbitMQ,Redis,Scala,Solr,Spark,Spring,SpringBoot,SpringCloud,TCPIP,Tomcat,Zookeeper,人工智能,大数据类,并发编程,数据库类,数据挖掘,新面试题,架构设计,算法系列,计算机类,设计模式,软件测试,重构优化,等更多分类
Stars: ✭ 12,009 (+26006.52%)
Mutual labels:  springboot, rabbitmq
xiaomi-vue-store
基于Vue + SpringBoot实现的前后端分离的仿小米商城项目,包含秒杀模块。
Stars: ✭ 58 (+26.09%)
Mutual labels:  rabbitmq, springboot
Mall Swarm
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Stars: ✭ 7,874 (+17017.39%)
Mutual labels:  springboot, rabbitmq
distmq
Distributed Message Queue based on Raft
Stars: ✭ 32 (-30.43%)
Mutual labels:  rabbitmq, message-queue
seckill parent
基于springboot+springcloud的高并发和商品秒杀项目,通过redis,rabbitmq等技术实现秒杀的高并发。
Stars: ✭ 59 (+28.26%)
Mutual labels:  rabbitmq, springboot
roger-rabbit
A module that makes the process of consuming and publishing messages in message brokers easier
Stars: ✭ 12 (-73.91%)
Mutual labels:  rabbitmq, message-queue
OpenSleigh
OpenSleigh is a Saga management library for .NET Core.
Stars: ✭ 198 (+330.43%)
Mutual labels:  rabbitmq, message-queue
AMQPClient.jl
A Julia AMQP (Advanced Message Queuing Protocol) / RabbitMQ Client.
Stars: ✭ 30 (-34.78%)
Mutual labels:  rabbitmq, message-queue
robert
基于SpringCloud的企业级微服务多租户系统、多语言的脚手架, 代码组件化、高内聚低耦合,代码简介,注释丰富容易上手,该项目包括用于开发分布式应用程序服务的必要组件,支持多应用程序访问,并使开发人员可以轻松地使用Spring Cloud编程模型来开发分布式应用程序服务。
Stars: ✭ 45 (-2.17%)
Mutual labels:  rabbitmq, springboot
Springboot Guide
SpringBoot2.0+从入门到实战!
Stars: ✭ 4,142 (+8904.35%)
Mutual labels:  springboot, rabbitmq
Fw Cloud Framework
基于springcloud全家桶开发分布式框架(支持oauth2认证授权、SSO登录、统一下单、微信公众号服务、Shardingdbc分库分表、常见服务监控、链路监控、异步日志、redis缓存等功能),实现基于Vue全家桶等前后端分离项目工程
Stars: ✭ 717 (+1458.7%)
Mutual labels:  springboot, rabbitmq

lemon-rabbitmq

乐檬框架之rabbitMQ的解耦实现方式(基于springboot框架)

openjdk License

lemon-rabbitmq 消息生产端

lemon-rabbitmq-protocol 消息协议层

lemon-rabbitmq-consumer 消息消费端


消息协议层

通过Jackson2序列化/反序列化,实现消息传递和对象接收

消息生产端

1、通过发送带有消费端服务类名称和方法请求头,控制消费端调用执行消费发送的信息

2、利用消息回调接口ConfirmCallback确保消息安全发送至broker服务器,处理效率比事物方式更高

public void sendMessage(final String serviceName, final String serviceMethodName,final String correlationId, Object request) {
   logger.info("sendMessage [this.{}, serviceMethodName:{} serviceName:{} correlationId: {}]", this.getClass(), serviceMethodName, serviceName, correlationId);
   rabbitTemplate.setConfirmCallback(this);
   rabbitTemplate.setCorrelationKey(correlationId);
   rabbitTemplate.convertAndSend(routingkey, request, new MessagePostProcessor() {            
       @Override
          public Message postProcessMessage(Message message) throws AmqpException {
              message.getMessageProperties().setAppId(appId);
              message.getMessageProperties().setTimestamp(new Date());
              message.getMessageProperties().setMessageId(UUID.randomUUID().toString());
              message.getMessageProperties().setCorrelationId(correlationId.getBytes());
              message.getMessageProperties().setHeader("ServiceMethodName", serviceMethodName);
              message.getMessageProperties().setHeader("ServiceName", serviceName);
              return message;
          }
   }, new CorrelationData(correlationId));
}

消息消费端

1、监听MQ消息,利用method.invoke调用指定的服务类名称和方法,消费接收到的消息

2、使用Ack/Nack手动确认消息处理状态,保证broker消息被正确消费

public void onMessage(Message message, Channel channel) throws IOException {
    System.out.println("----- received" + message.getMessageProperties());
		try {
			Object msg = messageConverter.fromMessage(message);
			if (!appId.equals(message.getMessageProperties().getAppId())){
		        channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
		        throw new SecurityException("非法应用appId:" + message.getMessageProperties().getAppId());
			}
			Object service = ctx.getBean(message.getMessageProperties().getHeaders().get("ServiceName").toString());
			String serviceMethodName = message.getMessageProperties().getHeaders().get("ServiceMethodName").toString();
			Method method = service.getClass().getMethod(serviceMethodName, msg.getClass());
	       method.invoke(service, msg);
	       //确认消息成功消费
	       channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
		} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
			System.out.println("------ err"+ e.getMessage());
	       channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
		}
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].