37 手写java版本的消息中间件

2020-08-05  本文已影响0人  滔滔逐浪

小项目做异步直接采用多线程,大项目采用mq
解耦: 就是将业务不同的场景隔离开,相互不影响。
生产者: 投递消息给MQ服务器端。MQ服务器端缓存该消息。
消费者: 消费者从mq服务器获取相应的消息

mq框架如何设计:
1,mq服务器端: 缓存生产者投递的消息 队列:
数据结构与算法课程
单机版本

package com.taotao.async_log.mq;

import org.apache.logging.log4j.util.Strings;

import java.util.concurrent.LinkedBlockingDeque;

/**
 *@author tom
 *Date  2020/8/5 0005 9:30
 *
 */
public class MQServer {
    public static void main(String[] args) throws InterruptedException {
        //定义mq服务器端
       LinkedBlockingDeque<String> linkedBlockingDeque= new LinkedBlockingDeque<String>();
       // System.out.println(linkedBlockingDeque.poll());
 //创建生产线程
        Thread producer=new Thread(()->{
            for (int i = 0; i < 10; i++) {
                linkedBlockingDeque.offer(i+"");
                System.out.println(Thread.currentThread().getName()+",向mq服务器端存放消费内容:"+i);

            }

        },"生产线程:");
        //主线程等待,生产线程投递万全部消息后则开始继续向下执行
     producer.start();
       producer.join();


        new Thread(()->{
            for (;;) {
              String msg=linkedBlockingDeque.poll();
              if(Strings.isEmpty(msg)){
                  return;
              }
                System.out.println(Thread.currentThread().getName()+",从mq服务器取出消息:"+msg);
            }

        },"消费线程线程:").start();
        //主线程等待,生产线程投递万全部消息后则开始继续向下执行








   }







}


手写MQ网络版本的思路:
一个mq服务器端存放多个不同的业务逻辑队列

网络通讯有哪些技术: netty,websocket.
{
"type":"生产者或者消费者",
"dequeName":"队列名称",
Data:{}

}

上一篇 下一篇

猜你喜欢

热点阅读