Pergunta

Eu preciso oferta programação de acções / eventos, no nosso web site. Uma analogia porcaria poderia ser um sistema de calendário, onde uma pessoa adiciona um item de calendário e quando a data / hora foi 'hit', então alguma lógica (por exemplo, calcular um relatório) é acionado.

Eu poderia ter centenas e até milhares de eventos programados que são inseridos pelos meus clientes. Quando um cliente entra algo para se programado, vou guardar essa informação para o banco de dados. Então eu estou supondo que eu vou adicionou um / em algum lugar emprego evento, que irá conter a chave primária da tabela de banco de dados. quando o evento é para ser demitido, eu vou pegar essa informação a partir do db, em seguida, fazer a lógica. feito.

Quais são algumas soluções comuns para lidar com isso?

Eu estou usando .NET 3.5 SP1. DB é Sql Server 2008. UI será webbased embora.

Eu não tinha certeza se as pessoas usam MSMQ? Ou algo embutido no Sql Server? Ou alguma biblioteca de código aberto (ex. Quartz.NET ) com um serviço NT. Servidor será windows 2008 Standard Edition.

Além disso -. Por favor, não sugestões para usar um equivalente trabalho cron ou quaisquer scripts de linha de comando, etc

Finalmente, e este é um objectivo secundário .. eu adoraria jogar isso para cima Azure para shiz e risos ... assim é o também possível? é só uma ideia lista de desejos. Eu prefiro fazê-lo em uma caixa dedicada, se a solução é mais fácil, do que usar Azure.

aplausos:)

edit: Logic para processar quando um evento é necessário para ser demitido, são empregos de fundo. Sem UI necessário.

Foi útil?

Solução

Quartz.NET provavelmente também poderia lidar com estes requisitos muito bem. Os benefícios que eu vejo são de várias formas de definir o agendador (calendários CronTrigger +) e a capacidade de ter seus trabalhos em pequenas unidades de código testável (empregos).

Quartz.NET também lhe dá a distribuição necessária e fail-over com características de agrupamento. Um recurso interessante é também per-gatilho falha de ignição configurável lidar com configurações que lhe dão oportunidade de reagir a falhas de ignição e planejador de tempo de inatividade.

SQL Service Broker parece ter o benefício de nenhuma votação, gostaria de saber se isso nunca vai ser o problema, porém, corretor tem a desvantagem de soar um pouco complicado (pelo menos a partir da descrição que eu li acima).

Apenas minha tendenciosa $ 0,02.

Outras dicas

Workflow Foundation pode fazer isso. Use um Delay atividade, definir o TimeSpan para (DesiredTimeOfExecution - Agora) . Para sistemas de maior escala, conjunto UnloadOnIdle a verdade, e os fluxos de trabalho pendentes serão persistiu até ser necessário.

Aqui está um exemplo muito simples de Delay Atividade.

WF é Free , incluído como parte do .NET Framework 3.0.

O que você quer é o SQL Server Service Broker.

Você pode fazer acesso ao banco cronometrado para consulta de dados de calendário, etc. É baseado enviado mensagens-It, mais poderoso do que MSMQ, não requer votação, e pode ser usado em ambientes distribuídos, se é isso que você precisa. Funciona muito bem para mim!

Você vai bater um procedimento armazenado para colocar sua informação do evento em uma fila SSB no db. Você vai dar essa mensagem um tempo no futuro para acordar e processar outro procedimento armazenado que agarra seus dados de eventos e coloca em uma fila de captação que faz um "Activação externa". EA envia uma notificação para um serviço do Windows que aponta para um aplicativo console. Isso console app agarra a informação do evento da fila de recolhimento. Agora que você tem seus dados de eventos no momento exato que você quer. Processá-lo da maneira que quiser no aplicativo console.

Há uma curva de aprendizado, mas é assim vale a pena se você precisa de confiabilidade, flexibilidade e escalabilidade que oferece SQL Service Broker. Abaixo estão alguns links para você começar.

Aqui está uma comparação: SQL Service Broker vs. MSMQ

Assim, apenas me permita postar um elo infelizmente. Caso contrário, eu poderia apontar-lhe mais recursos para ajudar você a começar com SSB.

Espero que isso ajude!

Uma opção poderia ser a criação de um trabalho do SQL para ser executado em qualquer que seja o intervalo mais granular que você tem é e processamento de todos os seus eventos, em seguida.

Se você quer o melhor de ambos os mundos .NET e SQL Server Você pode tarefas de uso SQL e chamada código gerenciado também. Eu não tenho nenhuma experiência com esta solução por isso peço desculpa up-front se o recurso I fornecido não é muito completo.

Se as tarefas são muito complexas e você não quer carregar montagens em SQL Server ou você simplesmente não fazer, como sua sistema de agendamento, então eu recomendo um serviço .NET Windows com um agendador de plug-in de terceiros. Pessoalmente, se todo o código pode ser mantido em um procedimento armazenado ou uma série de procedimentos armazenados eu ia fazer um trabalho desde que eu acho que é muito mais fácil de gerenciar e uma grande parte do trabalho já foi feito para você.

Editar

Eu notei um comentário que explica a granularidade. Se você tem algumas ações que precisam ser executadas a cada minuto, em seguida, uma solução de serviço .NET provavelmente seria mais fácil desde que você provavelmente teria que implementar algum tipo de solução de multi-threaded.

Você vai precisar de um agendador de tarefas e um gerenciador de trabalho desde que você tem pequena granularidade e você tem que capacidade de saber a priori se todos os trabalhos que acontecem em um determinado minuto terminará no minuto seguinte.

Isso faz com que o trabalho do programador fácil. Você deve ter uma tabela de banco de dados que armazena os seus postos de trabalho e cada minuto vão ter um serviço de programação de tarefas para que a tabela e selecionar os trabalhos que precisa ser feito.

Ele vai enfileirar esses empregos com um gerente trabalho. Você poderia usar outra tabela ou uma fila transacional para enfileirar seu trabalho. Seu serviço gerente trabalho vai monitorar a fila de trabalho. Você pode rolar o seu próprio ou uso BizTalk para monitorar a fila de trabalhos e lançar uma orquestração ou fluxo de trabalho . Ele vai puxar as tarefas fora do uma fila por um, realizar as tarefas e atualizar o status do trabalho no DB.

A sua questão será a escalabilidade, dependendo do número de usuários, o número de tarefas que colocar na fila e como intensiva (tempo, memória, CPU, etc.) cada tarefa é permitido ser. Se eu fosse você, eu iria empurrar para trás na granularidade tempo de 1 minuto e empurrá-lo para 5 minutos. O que você precisa fazer em 13:38 que você não pode esperar até 01:40 para? :)

Este é já um problema discutido em StackOverflow. por favor, vá através em asp.net

Você esqueceu de acrescentar a parte mais essencial de informação na sua pergunta - ASP.Net

Ele descreve um quadro programador para aplicações web ASP.NET que pode ser executado como um serviço e dar-lhe um método que periodicamente é chamado e, em seguida, você pode disparar sua lógica para eventos de carga, fila queridos válidos usando temporizadores.

Além disso, este é o mais barato de todas as alternativas. Espero que este é o que você necessário.

Depende um pouco sobre a natureza do sistema. Trabalhando a partir do pressuposto de que a definição completa dos eventos é armazenado no banco de dados:

  • Se as necessidades do evento para causar algo em uma interface Web, sobre atualizações verificar a tabela de entradas que 'aconteceu' e adicionar os indicadores visuais / telas / popups apropriados para a próxima saída pedido Web.
  • Se seus eventos se relacionam com processamento em segundo plano, a solução mais simples é escrever um stand-junto .NET aplicativo separado que as pesquisas da tabela de eventos de banco de dados para novos registros e cheques contra o relógio para ver quais eventos têm acontecido. Você pode ir de fantasia e envolver rosqueamento se alguns dos eventos causam longo execução de processos, etc., mas que seria o projeto básico. (Utilize apenas enfiando se você tem que ... um aplicativo single-threaded simples que as pesquisas da mesa seria mais robusto)

Então eu estou supondo que eu vou adicionou um lugar evento / trabalho, que irá conter a chave primária da tabela de banco de dados. quando o evento é para ser demitido, eu vou pegar essa informação a partir do db, em seguida, fazer a lógica.

Eu não sei qual é a solução comum é, mas, reinventando a roda, eu pensaria de criar um índice de cluster de banco de dados sobre o horário do evento, para que eu pudesse consultar o banco de dados a cada minuto com uma declaração como ...

SELECT * FROM Events WHERE Events.Time < next_minute
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top