Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Spring Amqp+Rabbit  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Какое-то время назад у кролика появилась фича складиварования мертвых сообщений в отдельную очередь. https://www.rabbitmq.com/dlx.html

Как средствами из шапки реализовать следующий маршрут: workingQueue->deadLetterQueue->workingQueue?
Моя идея была такова:

В аргументе рабочей очереди указать exchager по умолчанию, на который кидаются сообщения с ошибками :

 @Bean
  public Queue workingQueue() {
    return QueueBuilder
        .durable(requestQueue)
        .withArgument("x-dead-letter-exchange", "")
        .withArgument("x-dead-letter-routing-key", deadRequestQueue)
        .withArgument("x-message-ttl", ttl)
        .build();
  }


И в свою очередь в deadQueue указать ttl и кидать оттуда по expired в рабочий exchanger


@Bean
  public Queue deadLetterQueue() {
    return QueueBuilder
        .durable(deadRequestQueue)
        .withArgument("x-dead-letter-exchange", requestExchange)
        .withArgument("x-dead-letter-routing-key", requestRoutingKey)
        .withArgument("x-message-ttl", ttl)
        .withArgument("x-queue-mode", "lazy")
        .build();
  }


Сообщения по истечению ttl`а - попадают в deadRequestQueue с ключом равным - deadRequestQueue
Но из мертвой очереди они уже никуда не попадают.
28 дек 18, 17:31    [21775969]     Ответить | Цитировать Сообщить модератору
 Re: Spring Amqp+Rabbit  [new]
Герой дня
Member

Откуда: obmanula.ru
Сообщений: 30539
Озверин,

потому что мертвую очередь никто не обрабатывает ?

вообще, есть Spring Cloud Stream - там подобное делается настройками в application.yml
28 дек 18, 19:38    [21776028]     Ответить | Цитировать Сообщить модератору
 Re: Spring Amqp+Rabbit  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
Герой дня, так эта очередь в теории и не должна обрабатываться, даже не должна - у нее ttl и кажецо, что после истечения должно кинуться на exchanger из аргумента.
29 дек 18, 09:15    [21776197]     Ответить | Цитировать Сообщить модератору
 Re: Spring Amqp+Rabbit  [new]
nastyaa
Member

Откуда:
Сообщений: 376
Герой дня,

Можешь подсказать как работает toupperstring в этом коде

package kz.nic.converter;


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

/**
 *
 * @author admin
 */
public class KazakhLatinConverter {

    private final Map<String, String> dictionary = new HashMap();

    public KazakhLatinConverter() {
        fillDictionary();
    }

    /**
     * 
     * @param str
     * @return 
     */
    public String convert(String str) {        
        char[] chars = str.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < chars.length; i++) {
            char currentChar = chars[i];
            String currentString = Character.toString(currentChar);
            if (dictionary.containsKey(currentString)) {
                String translatedString = dictionary.get(currentString);

                if (Character.isUpperCase(currentChar)) {
                    boolean toUpperCase = false;
                    if (i + 1 < chars.length) {
                        char nextChar = chars[i + 1];
                        if (Character.isUpperCase(nextChar)) {
                            toUpperCase = true;
                        }

                    } else {
                        toUpperCase = true;
                    }
                    if (toUpperCase) {
                        translatedString = translatedString.toUpperCase();
                    }
                }

                stringBuilder.append(translatedString);
                continue;
            }
            stringBuilder.append(currentString);
        }
        return stringBuilder.toString();
    }
    
    /**
     * 
     */
    private void fillDictionary() {
        dictionary.put("а", "a");
        dictionary.put("А", "A");
        dictionary.put("&#1241;", "&#225;");
        dictionary.put("&#1240;", "&#193;");
        dictionary.put("б", "b");
        dictionary.put("Б", "B");
        dictionary.put("д", "d");
        dictionary.put("Д", "D");
        dictionary.put("е", "e");
        dictionary.put("Е", "E");
        dictionary.put("ё", "&#305;o");
        dictionary.put("Ё", "IO");
        dictionary.put("ф", "f");
        dictionary.put("Ф", "F");
        dictionary.put("г", "g");
        dictionary.put("Г", "G");
        dictionary.put("&#1171;", "&#501;");
        dictionary.put("&#1170;", "&#500;");
        dictionary.put("х", "h");
        dictionary.put("Х", "H");
        dictionary.put("&#1211;", "h");
        dictionary.put("&#1210;", "H");
        dictionary.put("і", "i");
        dictionary.put("І", "I");
        dictionary.put("и", "&#305;");
        dictionary.put("И", "I");
        dictionary.put("й", "&#305;");
        dictionary.put("Й", "I");
        dictionary.put("ж", "j");
        dictionary.put("Ж", "J");
        dictionary.put("к", "k");
        dictionary.put("К", "K");
        dictionary.put("л", "l");
        dictionary.put("Л", "L");
        dictionary.put("м", "m");
        dictionary.put("М", "M");
        dictionary.put("н", "n");
        dictionary.put("Н", "N");
        dictionary.put("&#1187;", "&#324;");
        dictionary.put("&#1186;", "&#323;");
        dictionary.put("о", "o");
        dictionary.put("О", "O");
        dictionary.put("&#1257;", "&#243;");
        dictionary.put("&#1256;", "&#211;");
        dictionary.put("п", "p");
        dictionary.put("П", "P");
        dictionary.put("&#1179;", "q");
        dictionary.put("&#1178;", "Q");
        dictionary.put("р", "r");
        dictionary.put("Р", "R");
        dictionary.put("с", "s");
        dictionary.put("С", "S");
        dictionary.put("ш", "sh");
        dictionary.put("Ш", "Sh");
        dictionary.put("ч", "ch");
        dictionary.put("Ч", "Ch");
        dictionary.put("т", "t");
        dictionary.put("Т", "T");
        dictionary.put("&#1199;", "&#250;");
        dictionary.put("&#1198;", "&#218;");
        dictionary.put("&#1201;", "u");
        dictionary.put("&#1200;", "U");
        dictionary.put("в", "v");
        dictionary.put("В", "V");
        dictionary.put("ы", "y");
        dictionary.put("Ы", "Y");
        dictionary.put("у", "&#253;");
        dictionary.put("У", "&#221;");
        dictionary.put("з", "z");
        dictionary.put("З", "Z");
        dictionary.put("э", "e");
        dictionary.put("Э", "E");
        dictionary.put("ю", "&#305;&#253;");
        dictionary.put("Ю", "I&#253;");
        dictionary.put("я", "&#305;a");
        dictionary.put("Я", "Ia");
        dictionary.put("ь", "");
        dictionary.put("Ь", "");
        dictionary.put("ъ", "");
        dictionary.put("Ъ", "");
        dictionary.put("ц", "ts");
        dictionary.put("Ц", "Ts");
        dictionary.put("щ", "sh");
        dictionary.put("Щ", "Sh");
    }
}
29 дек 18, 09:19    [21776198]     Ответить | Цитировать Сообщить модератору
 Re: Spring Amqp+Rabbit  [new]
Герой дня
Member

Откуда: obmanula.ru
Сообщений: 30539
nastyaa,

сори, большой код, надо разбираться.. пока некогда
29 дек 18, 13:25    [21776365]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить