10 rabbitmq的安装与集成

1 安装rabitmq

sudo apt install xmlto -y
sudo apt install python-simplejson -y
sudo apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -y
  • 2 测试
cd /usr/local/rabbitmq/sbin
启动、停止、重启、状态rabbitMq命令
sudo rabbitmq-server start
sudo rabbitmq-server stop
sudo rabbitmq-server restart
sudo rabbitmqctl status
netstat -nap | grep 5672

  • 3 开放端口
# 查看端口开启情况
netstat -nltp | grep 3306
# 开启端口
sudo iptables -I INPUT -p tcp --dport 5672 -j ACCEPT
sudo netfilter-persistent save
sudo netfilter-persistent reload
# windows 上测试
telnet 10.23.23.25 5672

3 spring boot 继承RabbitMQ

  • 1 添加依赖

    org.springframework.boot
    spring-boot-starter-amqp
  • 2 添加配置:
spring.rabbitmq.host=10.23.23.25
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
#消费者数量
spring.rabbitmq.listener.simple.concurrency= 10
spring.rabbitmq.listener.simple.max-concurrency= 10
#消费者每次从队列获取的消息数量
spring.rabbitmq.listener.simple.prefetch= 1
#消费者自动启动
spring.rabbitmq.listener.simple.auto-startup=true
#消费失败,自动重新入队
spring.rabbitmq.listener.simple.default-requeue-rejected= true
#启用发送重试
spring.rabbitmq.template.retry.enabled=true 
spring.rabbitmq.template.retry.initial-interval=1000 
spring.rabbitmq.template.retry.max-attempts=3
spring.rabbitmq.template.retry.max-interval=10000
spring.rabbitmq.template.retry.multiplier=1.0

1、Direct 模式

  • 3 MQConfig
@Configurationpublic class MQConfig {
    public static final String QUEUE = "queue";    @Bean    public Queue queue(){
        return new Queue(QUEUE, true);    }
}
  • 4 MQSender
@Servicepublic class MQSender {
    @Autowired    AmqpTemplate amqpTemplate;    @Autowired    RedisService redisService;    private static Logger log = LoggerFactory.getLogger(MQSender.class);    public void send(Object message){
        String msg = redisService.beanToString(message);        log.info("sender msg: " + msg);        amqpTemplate.convertAndSend(MQConfig.QUEUE, message);    }
}
  • 5 MQReceiver
/** *  Direct 模式 交换机Exchange * @param message */
@Servicepublic class MQReceiver {
    private static Logger log = LoggerFactory.getLogger(MQReceiver.class);    @RabbitListener(queues = MQConfig.QUEUE)
    public void receive(String message){
        log.info("receive mesage: " + message);    }
}
  • 6 函数入口
@AutowiredMQSender mqSender;@AutowiredMQReceiver mqReceiver;public Result<String> mq(){
    mqSender.send("weidalin, hello");    return Result.success("Hello, world");}

2、 topic 模式

  • 1 config
@Beanpublic Queue topicQueue2(){
    return new Queue(TOPIC_QUEUE2, true);}

@Beanpublic TopicExchange topicExchange(){
return new TopicExchange(TOPIC_EXCHAGE);}

@Beanpublic Binding topicBinding1(){
return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with(ROUTING_KEY1);}

@Beanpublic Binding topicBinding2(){
return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with(ROUTING_KEY2);}

  • 2 sender
public void sendTopic(Object message){
    String msg = redisService.beanToString(message);    log.info("sender topic msg: " + msg);    amqpTemplate.convertAndSend(MQConfig.TOPIC_EXCHAGE, "topic.key1", msg + "1");    amqpTemplate.convertAndSend(MQConfig.TOPIC_EXCHAGE, "topic.key2", msg + "2");}
  • 3 recieve
/** *  Topic 模式 交换机Exchange * @param message */@RabbitListener(queues = MQConfig.TOPIC_QUEUE1)
public void receiveTopic1(String message){
    log.info("topic queue1 receive mesage: " + message);}

@RabbitListener(queues = MQConfig.TOPIC_QUEUE2)
public void receiveTopic2(String message){
log.info("topic queue2 receive mesage: " + message);}

3 Fanout 模式

  • 1 confing
/** * Fanout 模式, */@Beanpublic FanoutExchange fanoutExchange(){
    return new FanoutExchange(FANOUT_EXCHANGE);}
@Beanpublic Binding FanoutBinding1(){
    return BindingBuilder.bind(topicQueue1()).to(fanoutExchange());}

@Beanpublic Binding FanoutBinding2(){
return BindingBuilder.bind(topicQueue2()).to(fanoutExchange());}

  • 2 sender
public void sendFanout(Object message){
    String msg = redisService.beanToString(message);    log.info("sender fanout msg: " + msg);    amqpTemplate.convertAndSend(MQConfig.FANOUT_EXCHANGE,  msg + "fantout");}
  • 3 recieve
    不需要改,直接用 Direct 模式的就行

4 headers 模式

  • 1 config
/** * Header 模式 */@Beanpublic HeadersExchange headersExchange(){
    return new HeadersExchange(HEADERS_EXCHANGE);}
@Beanpublic Queue headersQueue1(){
    return new Queue(HEADERS_QUEUE, true);}
@Beanpublic Binding headersBinding2(){
    Map<String, Object> map = new HashMap<String, Object>();    map.put("header1", "value1");    map.put("header2", "value2");    return BindingBuilder.bind(headersQueue1()).to(headersExchange())
            .whereAll(map).match();}
  • 2 sender
public void sendHeaders(Object message){
    String msg = redisService.beanToString(message);    log.info("sender headers msg: " + msg);    MessageProperties properties = new MessageProperties();    properties.setHeader("header1", "value1");    properties.setHeader("header2", "value2");    Message obj = new Message(msg.getBytes(), properties);    amqpTemplate.convertAndSend(MQConfig.HEADERS_EXCHANGE,            "", obj);}
  • 3 recieve
@RabbitListener(queues = MQConfig.HEADERS_QUEUE)
public void receiveTopic2(byte[] message){
    log.info("header queue2 receive mesage: " + new String(message));}
  • 7 为了让guest用户能远程连接,修改rabbitmq的配置/usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config
cd /usr/local/rabbitmq
cd etc
cd rabbitmq
vi rabitmq.config
# 填入

[{rabbit, [{loopback_users, []}]}].

启用管理控制台

./sbin/rabbitmq-plugins enable rabbitmq_management

重启rabbitmq。

cd ../sbin
./rabbitmqctl stop
./rabbitmq-server
ps -ef | grep rabbit



要卸载好多东西,有点吓人


tm 的直接gg了

解决:

cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info 
sudo apt-get install -f 
sudo apt-get upgrade
  • 问题: vi: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
# 解决
cp /usr/local/python3.6.3/lib/libpython3.6m.so.1.0 /usr/lib64/

@Beanpublic Queue miaosha_queue() {
return new Queue(MIAOSHA_QUEUE, true);}

posted @ 2021-07-10 21:49  weidalin  阅读(106)  评论(0)    收藏  举报