通过多线程和netty两种形式实现mq

消息中间件的一些名词:

Producer 生产者:

Consumer 消费者:

Broker: MQ服务器

Topic 主题:分类业务逻发送短信主题、发送优惠卷主题

Queue:存放消息的队列 先进先出 后进后出 原则 底层数组或者链表

Message: 生产者投递的报文:json

消费者netty客户端与nettyServer端MQ服务器端保持长连接,MQ服务器端保存

消费者连接。

生产者netty客户端发送请求给nettyServer端MQ服务器端,MQ服务器端在将该

消息内容发送给消费者。

body:{"msg":{"userId":"123456","age":"23"},"type":"producer",”topic”:””}

传输的报文就是一个json的字符串

生产者投递消息给MQ服务器端,MQ服务器端需要缓存该消息

MQ的实现

基于多线程队列简单实现mq

import com.alibaba.fastjson.JSONObject;
import java.util.concurrent.LinkedBlockingQueue;

/**
 * 无网络的情况下利用多线程实现MQ
 * 利用多线程制造消费者和生产者
 */
public class MultithreadMQ {
    //MQ服务器 存储消息的队列
    private static LinkedBlockingQueue<JSONObject> message=new LinkedBlockingQueue<>();


    //主函数
    public static void main(String[] args) {
        //生产者 生产线程
        Thread producerThread =new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true){
                        Thread.sleep(3000);
                        JSONObject data=new JSONObject();
                        data.put("userId","123");
                        System.out.println("生产消息");
                        //存入消费队列
                        message.offer(data);
                    }


                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"生产者");
        //调用生产线程
        producerThread.start();

        //消费者 消费线程
        Thread consumeThread =new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    while (true){
                        JSONObject data =message.poll();
                        if (data!=null){
                            System.out.println(Thread.currentThread().getName()+",获取到数据:"+data);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        },"消费者");
        //调用消费线程
        consumeThread.start();
    }
}

基于网络通讯版本的mq netty实现

首先导入相关依赖

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.0.23.Final</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>


        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值