Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)

目录

消息

ActiveMQ:

下载与使用(如果嫌下载麻烦的,我的资源里面也有,可以自行下载,全套的mq)

 Springboot整合

 RabbitMQ

下载与安装

 Springboot整合RabbitMQ

 RoctetMQ

下载和安装

 Springboot整合RocketMQ

Kafka

下载与安装

 Springboot整合kafka


消息

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第1张图片

下面我们将围绕四种异步传递技术开始介绍:

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第2张图片

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第3张图片

MQTT:消息队列遥测传输,专为小设备设计,是互联网生态系统主要成分之一。

Kafka:一种高吞吐量的分布式发布订阅消息系统,提供实时信息功能。

我们下面主要使用这四种开始讲解

ActiveMQ

RabbitMQ

RocketMQ

Kafka

模拟订单短信通知的案例,以下是代码及部分讲解

结构

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第4张图片

 OrderServiceImpl

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private MessageService messageService;
    @Override
    public void order(String id) {
        System.out.println("订单处理开始");
        //短信消息处理
        messageService.sendMessage(id);
        System.out.println("订单处理结束");
    }
}

MessageServiceImpl

@Service
public class MessageServiceImpl implements MessageService {

    private ArrayList mgList=new ArrayList();

    @Override
    public void sendMessage(String id) {
        System.out.println("待发送消息的订单已纳入队列,id:"+id);
        mgList.add(id);
    }

    @Override
    public String doMessage() {
        String id = mgList.remove(0);
        System.out.println("已完成短信发送业务,id:"+id);
        return id;
    }
}

MessageController

@RestController
@RequestMapping("/msgs")
public class MessageController {
    @Autowired
    private MessageService messageService;
    @GetMapping
    public String doMessage(){
        String id = messageService.doMessage();
        return id;
    }
}

OrderController

@RequestMapping("/orders")
@RestController
public class OrderController {
    @Autowired
    private OrderService orderService;
    @PostMapping("{id}")
    public void order(@PathVariable String id){
        orderService.order(id);
    }
}

ActiveMQ:

下载与使用(如果嫌下载麻烦的,我的资源里面也有,可以自行下载,全套的mq)

下载好后我们可以直接在bin下的win64下的

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第5张图片

 这个文件直接双击运行

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第6张图片

 然后在中间倒数第二行我们可以看到可视化地址,在网址中输入这个,我们第一次登录都会有提示登录账号密码(都是admin)。

然后我们就可以看到下面这个

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第7张图片

 Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第8张图片

 Springboot整合

1.导入坐标


        
            org.springframework.boot
            spring-boot-starter-activemq
        

2.配置信息

spring:
  activemq:
    broker-url: tcp://localhost:61616
  jms:
    pub-sub-domain: true   发布订阅模式开启,默认是点对点模式
    template:
      default-destination: ***   队列名称

3.示例代码

@Service
public class MessageServiceActiveMQImpl implements MessageService {
    @Autowired
    private JmsMessagingTemplate messagingTemplate;

    @Override//发送信息
    public void sendMessage(String id) {
        System.out.println("待发送消息的订单已纳入队列,id:"+id);
        //第一个参数是队列名字
        messagingTemplate.convertAndSend("order.queue.id",id);
    }

    @Override//接收信息
    public String doMessage() {
        //第一个参数是队列名字
        String id =messagingTemplate.receiveAndConvert("order.queue.id",String.class);
        System.out.println("已完成短信发送业务,id:"+id);
        return id;
    }
}

上面是第二个方法是手动接收信息,下面这个是自动接受信息

@Component//将该类定义成bean被springboot管控
public class MessageListener {
    //实现了自动接收信息
    @JmsListener(destination = "order.queue.id")
    @SendTo("order.order.queue.id")//上面接收完后再发送当前方法的返回值到新队列
    public void receive(String id){
        System.out.println("已完成短信发送业务,id:"+id);
    }
}

可以在下面的queue和topic中分别查看点对点模式和发布订阅模式下的队列

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第9张图片

 RabbitMQ

下载与安装

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第10张图片

 配置到安装目录下Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第11张图片

 Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第12张图片

 然后用管理员模式运行cmd,切换到sbin目录下,找到下面这个运行(电脑名称是中文的好像会出现问题)

 

 Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第13张图片

 我们这里需要用到的是下面的一个插件,我们启动后可以通过web访问。

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第14张图片

 访问地址为localhost:15672,账号密码为guest

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第15张图片

 Springboot整合RabbitMQ

1.导入依赖


        
            org.springframework.boot
            spring-boot-starter-amqp
        

2.配置

spring:
  rabbitmq:
    host: localhost
    port: 5672

3.示例代码(直连模式)

业务类
@Service
public class MessageServiceRabbitMQImpl implements MessageService {

    @Autowired
    private AmqpTemplate amqpTemplate;
    @Override
    public void sendMessage(String id) {
        System.out.println("待发送消息的订单已纳入队列,id:"+id);
        amqpTemplate.convertAndSend("directExchange","direct",id);
    }

    @Override
    public String doMessage() {
        return null;
    }
}
配置类
@Configuration
public class RabbitConfigDirect {

    @Bean
    public Queue directQueue(){
        return new Queue("direct_queue");
    }
    @Bean
    public Queue directQueue2(){
        return new Queue("direct_queue2");
    }
    @Bean
    public DirectExchange  directExchange(){
        return new DirectExchange("directExchange");
    }

    @Bean
    public Binding binding(){
        return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct");
    }
    @Bean
    public Binding binding2(){
        return BindingBuilder.bind(directQueue2()).to(directExchange()).with("direct2");
    }
}
监听类
@Component
public class MessageListener {

    @RabbitListener(queues = "direct_queue")
    public void receive(String id){
        System.out.println("已完成短信发送业务,id:"+id);
    }
}

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第16张图片

 注意上面的参数。

4.示例代码(topic模式)

配置类
@Configuration
public class RabbitConfigDirect {

    @Bean//操作队列
    public Queue topicQueue(){
        return new Queue("topic_queue");
    }
    @Bean
    public Queue topicQueue2(){
        return new Queue("topic_queue2");
    }
    @Bean//交换机
    public TopicExchange topicExchange(){
        return new TopicExchange("topicExchange");
    }

    @Bean//绑定
    public Binding binding(){
        return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.order.id");
    }
    @Bean
    public Binding binding2(){
        return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("topic2");
    }
}
监听类
@Component
public class MessageListener {

    @RabbitListener(queues = "topic_queue")
    public void receive(String id) {
        System.out.println("已完成短信发送业务,id:" + id);
    }
    @RabbitListener(queues = "topic_queue2")
    public void receive2(String id) {
        System.out.println("已完成短信发送业务,id:" + id);
    }
}
业务类
@Service
public class MessageServiceRabbitMQImpl implements MessageService {

    @Autowired
    private AmqpTemplate amqpTemplate;
    @Override
    public void sendMessage(String id) {
        System.out.println("待发送消息的订单已纳入队列,id:"+id);
        amqpTemplate.convertAndSend("topicExchange","topic.order.id",id);

    }
//由于有监听类了,这个方法就没有必要写了
    @Override
    public String doMessage() {
        return null;
    }
}

 需要注意的是这里的routingkey可以使用占位符

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第17张图片

 RoctetMQ

下载和安装

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第18张图片

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第19张图片

 Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第20张图片

 启动时候在bin下,启动下面这两个cmd文件。(启动闪退的,注意环境变量配置jdk的路径不能有空格。要么换个路径放,要么改路径名字。另外,如果你的jdk是安装在program files路径,可以在环境变量配置路径写PROAGA~1,这是特殊表达式。)Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第21张图片

 验证是否启动成功(在cmdbin目录下输入以下命令)

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第22张图片

 Springboot整合RocketMQ

1.导入依赖


        
            org.apache.rocketmq
            rocketmq-spring-boot-starter
            2.2.2
        

2.配置

rocketmq:
  name-server: localhost:9876
  producer:
    group: group_rocketmq

3.示例代码

业务类
@Service
public class MessageServiceImpl implements MessageService {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @Override
    public void sendMessage(String id) {
        System.out.println("待发送消息的订单已纳入队列,id:"+id);
        //同步
//        rocketMQTemplate.convertAndSend("order_id",id);
        //异步
        SendCallback callback=new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("发送成功");
            }

            @Override
            public void onException(Throwable throwable) {
                System.out.println("发送失败");
            }
        };
        rocketMQTemplate.asyncSend("order_id",id,callback);
    }

    @Override
    public String doMessage() {
        return null;
    }
}
监听类
@Component
@RocketMQMessageListener(topic = "order_id",consumerGroup = "group_rocketmq")
public class MessageListener implements RocketMQListener {

    @Override
    public void onMessage(String id) {
        System.out.println("已完成短信发送业务,id:" + id);
    }
}

Kafka

下载与安装

 Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第23张图片

 启动(在bin目录下输入以下命令)

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第24张图片

若出现(此时不应有 \Java\jdk1.8.0_73\lib\dt.jar。 )错误,这个是因为jdk路径有空格,我们只需要将我们的jdk复制到没有空格的路径下,并修改环境变量JAVA_HOME即可。

操作topic

Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第25张图片

 测试功能Springboot学习笔记(消息及activemq,rabbitmq,rocketmq和kafka)_第26张图片

 Springboot整合kafka

 1.导入坐标


        
            org.springframework.kafka
            spring-kafka
        

2.配置

spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: order

3.示例代码

业务层
@Service
public class MessageServiceImpl implements MessageService {
    @Autowired
    private KafkaTemplate kafkaTemplate;
    @Override
    public void sendMessage(String id) {
        System.out.println("待发送消息的订单已纳入队列,id:"+id);
        kafkaTemplate.send("topic1",id);
    }

    @Override
    public String doMessage() {
        return null;
    }
}
监听器
@Component
public class MessageListener {
    @KafkaListener(topics = "topic1")
    public void receive(ConsumerRecord record){
        System.out.println("已完成短信发送业务,id:" + record.value());

    }
}

你可能感兴趣的:(springboot学习笔记,大数据,spring,boot,java,学习,rabbitmq)