Поскольку проекту нужно передавать и получать данные, а объём данных относительно большой — около 3 миллионов данных в день
В начале я использовал http post для подачи данных, но обнаружил, что он слишком медленный, а скорость отправки значительно ниже скорости приёма.
Поэтому, если вы хотите использовать длинное соединение с сокетом для отправки и получения данных, написать сокетный сервер и клиент самостоятельно, это пустая трата времени, но может быть сделано плохо
Наконец, activemq используется для отправки и получения данных
Во-первых, код производителя выглядит следующим образом:
Для потребителей существует две модели:
1: Обычная подписка, не требуется постоянная «подписка», то есть при подключении вы можете получать сообщения, но не можете получать сообщения до подключения, используя «CreateConsumer» 2: Постоянная подписка: после подключения вы можете получать данные, которые ранее не были отправлены, используя «CreateDurableConsumer»
Ссылки на введение CreateDurableConsumer:Вход по гиперссылке виден.
Создайте непостоянную подписку на указанную тему, если она ещё не существует, и создайте потребителя на этой постоянной подписке. Этот метод создаёт постоянную подписку без использования селектора сообщений, и значение noLocal является ложным. Приложение использует постоянную подписку, и оно должно получать все сообщения, опубликованные по теме, включая сообщения, опубликованные, когда с ним нет активных пользователей. Провайдер JMS ведёт учёт этой постоянной подписки и гарантирует, что все сообщения от издателя будут храниться до тех пор, пока они не будут доставлены потребителю и подтверждены этой постоянной подпиской до истечения срока их действия.
Постоянные подписки продолжают накапливать сообщения, пока они не будут удалены с помощью метода отписки.
Этот метод можно использовать только с несовместными постоянными подписками. Любые постоянные подписки, созданные с помощью этого метода, будут отменены. Это означает, что по подписке одновременно может находиться только один активный (то есть не закрытый) потребитель. Термин «потребитель» здесь обозначает объект TopicSubscriber, MessageConsumer или JMSConsumer в любом клиенте.
Нераспределённая постоянная подписка идентифицируется именем, указанным клиентом, и идентификатором клиента, который должен быть установлен. Приложения, которые затем хотят создавать потребителей на нераспределённой постоянной подписке, должны использовать тот же идентификатор клиента.
Если нераспространённая постоянная подписка с тем же именем и идентификатором клиента уже существует, и уже указаны те же темы, селектор сообщения и значение noLocal, и ни один пользователь не активен (то есть не закрыт) по постоянной подписке, этот метод создаёт существующую устойчивую подписку на MessageConsumer.
Если нераспределённая постоянная подписка с тем же именем и идентификатором клиента уже существует, и пользователь на постоянной подписке уже активен (то есть не закрыт), будет запущена JMSException.
Если уже есть нераспространённая постоянная подписка с тем же именем и идентификатором клиента, но с другой темой, указано селектор сообщений или значение noLocal, и ни один пользователь не активен (то есть не закрыт) по постоянной подписке, это эквивалентно отключению (удалению) старой подписки и созданию новой.
Общие и несовместные постоянные подписки могут иметь не одно имя и идентичность клиента. Если общая постоянная подписка с тем же именем и идентификатором клиента уже существует, запускается JMSException.
Нет ограничений на постоянные подписки и общие непостоянные подписки с одним именем и идентификатором клиента. Такая подписка будет полностью отдельной.
Этот метод идентичен соответствующему методу createDurableSubscriber, за исключением того, что возвращает MessageConsumer вместо TopicSubscriber для представления потребителя.
Параметр: Темы — Невременные темы подписки имя — имя, используемое для обозначения этой подписки Бросок: InvalidDestinationException — если указана недопустимая тема. IllegalStateException — если идентификатор гостя не установлен JMSException - Если сессия не создаёт несовместную постоянную подписку и MessageConsumer из-за внутренней ошибки Если уже существует нераспределённая постоянная подписка с тем же именем и идентификатором клиента, и потребитель уже активен Если уже существует общая постоянная подписка с тем же именем и идентификатором клиента С тех пор: JMS 2.0 IMessageConsumer CreateDurableConsumer(ITopic destination, name string, string selector, bool noLocal);
где messageSelector — селектор сообщений; Флаг noLocal по умолчанию ложный, и при установке true он ограничивает пользователей в получении сообщений, опубликованных только через их же соединение, что применимо только к темам, а не к очередям. Имя — это уникальная идентичность темы подписки, и этот параметр должен быть установлен при подписании на постоянную подписку.
Activemq .net нуждается в ссылке на загрузку пакета:Вход по гиперссылке виден.
Полный исходный код для скачивания:
Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйста Ответ
|