RocketMq--概念--简单生产消费java代码

何为消息:

  1. 服务器间的业务请求
    1. 原始架构:
      1. 服务器中的A功能需要调用B、C模块才能完成,这些都是耦合模块,一个模块出问题或模块之间连接坏掉,则整体坏掉
    2. 微服务架构:
      1. 服务器A向服务器B发送要执行的操作(视为消息)
      2. 服务器A向服务器C发送要执行的操作(视为消息)

MQ作用

优势:

  • 1.应用解耦(提高系统可维护性,容错性)
  • 2.异步提速(微服务集群环境下,每个服务都在并行做自己的事,执行时间互不影响,提升用户体验和系统吞吐量
  • 3.削峰填谷(提高系统稳定性,把短时间内暴增的数据,在一段时间内平摊发送,使数据平缓流动,不会造成短时间内数据暴增,给机器带来压力的现象)

劣势:

  • 系统可用性降低:系统引入外部依赖越多,当然稳定性越差,万一mq宕机了呢?
  • 系统复杂度提高:重复消费?消息丢失?如何保证消息传递的有序性?
  • 一致性问题:类似事务的原子性,多个消费者之间,处理消息有的成功有的失败咋办?

运行机制:

在这里插入图片描述

基础概念
  1. 生产者
  2. 消费者
  3. 消息服务器
  4. 命名服务器
  5. 消息(实质为实体类
    1. 主题
    2. 标签
  6. 心跳
  7. 监听器
  8. 拉取消费、推动消费
  9. 注册

环境搭建及安装略

简单生产消费案例:

生产者:

冷知识:接口可以new,只要实现了它的方法就行了哦!!!
//发送消息
//缺啥补啥
//作业1 string byte[] char[] 相互转换
public class Producer {
    public static void main(String[] args) throws Exception {
        //1. 谁来发?
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        //2. 设定发送的命名服务器地址
        producer.setNamesrvAddr("localhost:9876");
//        3.1启动发送的服务
        producer.start();
        //3. 怎么发?
        //4. 创建要发送的消息对象,指定topic,指定内容body
        String msg="hello world ";
        Message message = new Message("topic1", "tag1", msg.getBytes());
        SendResult sendResult = producer.send(message);
        //5. 发的结果是什么?
        System.out.println(sendResult);
        //6. 打扫战场
        producer.shutdown();
    }

}

消费者:

//消费者
//缺啥补啥
//作业2 能不能new 接口? 可以!!!只要实现了该接口的方法就能new
public class Consumer {
    public static void main(String[] args) throws Exception {
        //1. 谁来收?推送模式的消费者,拉取模式太耗资源
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group1");
        //2. 从哪里收消息?
        consumer.setNamesrvAddr("localhost:9876");
        //3. 监听哪个消息队列。对应消费者的消息队列
        consumer.subscribe("topic1","*");
        //4. 处理业务流程 注册监听器
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                //写我们的业务逻辑
                for (MessageExt msg : msgs) {
                    System.out.println(msg);
                    byte[] body = msg.getBody();
                    System.out.println(new String(body));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        consumer.start();
        System.out.println("消费者起来了");

        //千万别关消费者

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值