Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 13505|Resposta: 2

Configurações persistentes de assinatura do ActiveMQ

[Copiar link]
Publicado em 09/01/2017 11:12:10 | | |

Configurações persistentes de assinatura do ActiveMQ
Ao definir o modo de entrega PERSISTENT para o editor, você pode usar assinaturas persistentes para assinantes, o que garante que o programa Pub/Sub receba todas as mensagens publicadas.
As assinaturas de mensagens são divididas em assinaturas não duráveis e assinaturas duradouras, e assinaturas não duráveis só podem receber mensagens enviadas a um tópico quando o cliente está ativo, ou seja, quando o cliente está offline, mensagens enviadas ao tema durante esse período serão perdidas e nunca recebidas. Quando o cliente está offline, o ActiveMQ salva todas as mensagens enviadas ao sujeito de acordo com seu ID, e quando o cliente se conecta novamente ao ActiveMQ, recebe todas as mensagens enviadas ao sujeito quando estiver offline. Assinaturas persistentes aumentam a sobrecarga e têm apenas um usuário ativo em uma assinatura persistente por vez. Passos para estabelecer uma assinatura persistente:
1. Configurar um ID de cliente para a conexão;
2. Especifique um nome de assinatura para o tema da assinatura;
A combinação acima deve ser única.
O código implementa assinaturas persistentes

(1) Ao usar fila, ou seja, ao entrar na fila, há apenas um consumidor por mensagem, então a persistência é muito simples, basta salvar no banco de dados

。 Depois, qualquer consumidor pode pegá-lo e descartá-lo. Não importa se o consumidor desliga por um tempo.

(2) Ao usar o tópico, ou seja, ao se inscrever, cada mensagem pode ter múltiplos consumidores, o que é mais problemático.

Primeiro, assumindo que os consumidores são consumidores comuns,
------------------------
Após o lançamento do <1> activemq, a News 1 foi lançada, mas infelizmente, nenhum consumidor está começando agora, ou seja, nenhum consumidor assinou. Então

, a notícia foi abandonada.

<2> O Consumidor 1 iniciou, conectou ao activemq, assinou e esperou uma mensagem~~

ActiveMQ posta a mensagem 2, OK, o consumidor 1 recebe e processa. Abandono da mensagem.

<3> O Consumer 2 também foi lançado, conectado ao activemq, assinado e aguardando uma mensagem~~

ActiveMQ publica a mensagem 3, OK, consumidor 1, consumidor 2 são todos recebidos e processados. Abandono da mensagem.

<4> Consumidor 1 está desligado.

Activemq posta a mensagem 4, OK, consumidor 2 recebe e processa. Abandono da mensagem.

<5> Consumidor 1 começou novamente.

O activemq publica as mensagens 5, OK, Consumidor 1 e Consumidor 2 que recebem e processam. Abandono da mensagem.
-----------------------------
Para resumir:
O Activemq simplesmente envia mensagens para o consumidor atualmente lançado.
Consumidores que desligarem vão perder muitas mensagens e não conseguirão recebê-las novamente.

Se a mensagem enviada for um dado importante de sincronização do usuário e não o conseguir, os dados do usuário não são sincronizados.

Então, como fazer com que os consumidores recebam mensagens perdidas quando reiniciam?

A resposta é uma assinatura persistente.
-----------------------------

Assinaturas comuns, sem distinção entre consumidores, se houver algumas pessoas no local, jogam alguns pãezinhos no vapor.
Para assinaturas persistentes, você precisa registrar o nome do consumidor.
Zhang San disse: Eu sou Zhang San, tem pãezinhos no vapor para mim, vou voltar para buscá-los.
Li Si disse: Eu sou Li Si, tem pãezinhos no vapor para mim, vou voltar para buscá-los.
activemq anotou os nomes de Zhang San e Li Si.

Então, ao dividir pãezinhos no vapor, uma cabeça ainda dá um pão cozido no vapor.
Depois da divisão, quando viu que Zhang San não falava, significava que ele não estava lá, então deixe-o um.
Li Si falou, então não havia necessidade de ficar.

Zhang San voltou, procurou o Activemq e deu uma olhada, esse não é Zhang San, traga os pãezinhos no vapor dele rápido.
Pode ser um pão cozido no vapor, ou pode ser 100 pãezinhos cozidos no vapor, depende de quantos pães Zhang San dividiu desde que saiu por um tempo.

activemq distingue consumidores por clienteID e nome do assinante.
-----------------------------
Crie uma conexão
conexão = conexãoFábrica.criarConexão();
connection.setClientID("bbb"); Assinaturas persistentes exigem a configuração disso.
conexão.start();

Crie uma sessão
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Criar um destino
Tema tópico = sessão.createTopic("userSyncTopic"); Nome do tema

MensagemConsumidor = sessão.criarConsumidor(tópico); Assinatura regular
MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Assinaturas persistentes


Outro ponto é que o produtor da mensagem usa o modo persistente ao enviar mensagens
MensagemProdutor produtor = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Se não, ela é persistente por padrão

(5) Se o mesmo "clienteID" for usado, ele é considerado o mesmo consumidor. Se dois programas usarem o mesmo "clientID", apenas um pode se conectar ao activemq ao mesmo tempo, e a segunda conexão reportará um erro.

(6) As configurações do activemq estão em conf/activemq.xml, e as mensagens padrão são salvas em data/kahadb, e as mensagens não serão perdidas ao reiniciar o activemq.

Você pode acessar http://localhost:8161/admin/index.jsp: ver informações sobre filas atuais, tópicos e assinantes persistentes, enviar mensagens e muito mais.

Você pode copiar o conteúdo do activemq-jdbc.xml e modificá-lo, e salvar a mensagem em outros bancos de dados.




Anterior:Canal VIP de quinta geração para comprar ingressos 360 quebrou, rapidamente entre na fila VIP
Próximo:. Plataforma .Net
 Senhorio| Publicado em 09/01/2017 13:41:53 |
1 Comparação das características técnicas da fila e do tópico
nome
Tema
Fila
Visão geral
Publicar Assinar mensagens Publicar mensagens de assinatura
Ponto a Ponto Ponto a Ponto
Não existe estado
Os dados do tópico são sem estado por padrão.
Os dados da fila são salvos como arquivo no servidor MQ por padrão, por exemplo, o MQ ativo geralmente é armazenado em $AMQ_HOME\data\kr-store\data. Também pode ser configurado como um armazenamento de banco de dados.
Garantia de integridade
Não há garantia de que todos os dados publicados pela editora serão aceitos pelo assinante.
A fila garante que cada dado possa ser recebido pelo receptor.
se a mensagem será perdida
De modo geral, quando uma editora publica uma mensagem sobre um tema, somente o sub que está ouvindo o endereço do tema pode receber a mensagem. Se não houver um sub ouvindo, o assunto se perde.
O remetente envia uma mensagem para a Fila de destino, e o receptor pode receber mensagens nessa Fila de forma assíncrona. Mensagens na Fila não serão perdidas se não houver um destinatário para atendê-las por enquanto.
Política de recepção de liberação de mensagens
Política de publicação e recebimento de mensagens um-para-muitas, múltiplos subreddits ouvindo o mesmo endereço de tópico podem receber mensagens enviadas pelo editor. O sub recebe a notificação para o servidor mq
Políticas de publicação e recebimento de mensagens um a um, mensagens enviadas por um remetente só podem ser recebidas por um único destinatário. Após o receptor receber, o servidor MQ notifica o servidor MQ de que foi recebido, e o servidor MQ exclui ou toma outras ações nas mensagens na fila.

 Senhorio| Publicado em 09/01/2017 13:42:15 |
A maior diferença entre tópico e fila é que o tópico está na forma de broadcasting, notificando todos os clientes de escuta online que há uma nova mensagem, e o cliente sem monitoramento não receberá a mensagem; A Queue, por outro lado, notifica um dos múltiplos clientes de escuta de forma peer-to-peer.

2 Comparação da eficiência do processamento de mensagens entre métodos de tópico e de fila
        Ao aumentar o número de concorrências do cliente de escuta, verifique se o envio de mensagens do tema diminuirá significativamente devido ao aumento da concorrência do cliente de escuta.
        A partir dos resultados medidos, não há diferença significativa na eficiência do envio e recebimento de mensagens enviadas pelo método tópico sob a premissa de um assinante e 100 assinantes, mas sob a premissa de concorrência de 500 assinantes (threads), a diferença de eficiência é óbvia (devido à concorrência de 500 threads, a taxa de uso da CPU da minha máquina chega a 70-90%, então é impossível confirmar se é um gargalo de desempenho causado pelo meu teste local ou um gargalo de desempenho no método de envio de mensagens do tópico, resultando em uma diminuição significativa da eficiência).
        Não há diferença significativa na eficiência de enviar e receber mensagens enviadas pelo método de tópico e modo fila sob a premissa de um assinante e 100 assinantes, mas sob a premissa de concorrência de 500 assinantes, a eficiência do modo tópico é significativamente menor do que a da fila.
        A eficiência de enviar e receber mensagens enviadas no método Queue não muda significativamente sob a premissa de um assinante, 100 assinantes e 500 assinantes.
Dados medidos por tópicos:


O número total de mensagens enviadas pelo remetente
O número total de mensagens recebidas por todos os assinantes
O tempo médio que leva para enviar e receber mensagens
Assinante único
100
100
101ms
100 assinantes
100
10000
103ms
500 assinantes
100
50000
14162ms

Dados medidos em fila:


O número total de mensagens enviadas pelo remetente
O número total de mensagens recebidas por todos os assinantes
O tempo médio que leva para enviar e receber mensagens
Assinante único
100
100
96ms
100 assinantes
100
100
96ms
500 assinantes
100
100
100ms

Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com