springboot之消息(rabbitMQ)

1.rabbitMQ安装配置

#docker安装rabbitmq
[root@docker 桌面]# docker pull rabbitmq:3-management
#dockerrabbitmq
[root@docker 桌面]# docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management
#查看容器,安装运行成功
[root@docker 桌面]# docker ps
CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                                                                                        NAMES
c618c06457e2        rabbitmq:3-management   "docker-entrypoint.s   27 seconds ago      Up 5 seconds        4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp   goofy_hawking       
f12e72d71f87        mysql:5.5               "docker-entrypoint.s   2 hours ago         Up 2 hours          0.0.0.0:12345->3306/tcp                                                                      ecstatic_hoover     
a257a2002919        redis                   "docker-entrypoint.s   2 hours ago         Up 2 hours          0.0.0.0:6379->6379/tcp                                                                       adoring_jones  

2.rabbitMQ测试

浏览器访问:

http://192.168.254.129:15672/

登录
用户名:guest
密码:guest
在这里插入图片描述
(1)添加交换器:
在这里插入图片描述
(2)添加队列:
在这里插入图片描述
(3)交换器绑定队列:
在这里插入图片描述
(4)交换器给队列发送消息:
在这里插入图片描述
(5)队列接收消息:
在这里插入图片描述
(6)队列删除消息:
在这里插入图片描述

3.RabbitTemplate发送、接收消息&序列化机制

book类:

package com.atguigu.springboot.bean;

public class Book {
    private String bookName;
    private String author;

    public Book() {
    }

    public Book(String bookName, String author) {
        this.bookName = bookName;
        this.author = author;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

自定义序列化配置类:

package com.atguigu.springboot.config;

import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyAMQPConfig {

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(new Jackson2JsonMessageConverter());
        return template;
    }
}

发送消息和接收消息测试:

package com.atguigu.springboot;

import com.atguigu.springboot.bean.Book;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest
class Springboot02AmpqApplicationTests {

	@Autowired
	RabbitTemplate rabbitTemplate;

	//以单播形式发送数据
	@Test
	void contextLoads() {
		Map<String,Object> map=new HashMap<>();
		map.put("msg","这是第一条消息");
		map.put("data", Arrays.asList("helloworld",123,true));
		//对象被序列化之后发送出去
		rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);
		//rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",new Book("西游记","吴承恩"));
	}

	//接收数据,将数据自动转换为json发送出去
	@Test
	public void recerive(){
		Object o = rabbitTemplate.receiveAndConvert("atguigu.news");
		System.out.println(o.getClass());
		System.out.println(o);
	}
	//广播形式发送消息
	@Test
	public void send(){
		rabbitTemplate.convertAndSend("exchange.fanout","",new Book("三国演义","罗贯中"));
	}

}

数据发送成功:
在这里插入图片描述

4.@RabbitListener,@EnableRabbit监听消息队列(有点问题,后面处理)

package com.atguigu.springboot;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableRabbit//开启基于注解的rabbitMQ
@SpringBootApplication
public class Springboot02AmpqApplication {

	public static void main(String[] args) {
		SpringApplication.run(Springboot02AmpqApplication.class, args);
	}

}

package com.atguigu.springboot.service;

import com.atguigu.springboot.bean.Book;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
public class BookService {
    
    //这个有问题
    @RabbitListener(queues = "atguigu.news")
    public void lisener(Book book){
        System.out.println("收到消息:"+book);
    }
    
    @RabbitListener(queues = "atguigu")
    public void receive(Message message){
        System.out.println(message.getBody());
        System.out.println(message.getMessageProperties());
    }
}

5.AmqpAdmin

AmqpAdmin:创建和删除 Queue、Exchange、Binding

	@Autowired
	AmqpAdmin amqpAdmin;

	@Test
	public void createExchange(){
		amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
		System.out.println("创建Exchange完成!");

		amqpAdmin.declareQueue(new Queue("amqpadmin.queue"));
		System.out.println("创建Queue完成!");
		//创建绑定
		amqpAdmin.declareBinding(new Binding("amqpadmin.queue",Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null));
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值