Требуется иметь только один объект для приложения, которого мы можем достичь, чтобы сделать сущность одноэлементной сущностью. Создание одноэлементного класса реализует шаблон проектирования одноэлементного объекта, который прост и легок. До сих пор я создавал один объект для каждой JVM.
Когда я узнаю о кластерной среде.
В нескольких средах JVM каждая из них будет иметь свою собственную копию одноэлементного объекта, что может привести к множеству проблем, особенно в кластерной среде, где доступ к ресурсу должен быть ограничен и синхронизирован.
Weblogic имеет концепцию Singleton Service - где только экземпляр работает в кластере, и все клиенты будут искать один и тот же экземпляр.
В моем случае у меня есть сервер Weblogic с кластерной средой, который имеет два управляемых сервера MS1 и MS2. Мое приложение содержит один поток, который отвечает за чтение почты из почтового ящика и размещение этой записи в базе данных. Когда я развернул это приложение на сервере Weblogic.
Поток отвечает за чтение почты и занесение ее в базу данных. На самом деле это не лучшее решение, поскольку в некоторых случаях возникают проблемы, когда два потока MS1 и MS2 читают одну и ту же запись за раз, помещают ее в базу данных и создают повторяющуюся запись. Чтобы решить эту проблему, я реализовал интерфейс SingletonService. Этот интерфейс находится в пакете ниже
weblogic.cluster.singleton.SingletonService
Этот интерфейс содержит два метода, которые необходимо реализовать.
- активировать ()
- деактивировать ()
Что такое SingletonService?
Одноэлементная служба - это служба, которая может работать только на одном управляемом сервере в кластере одновременно. Weblogic Server позволяет автоматически отслеживать и переносить одноэлементные службы с одного управляемого сервера на другой.
Как это реализовать?
Шаги по реализации и настройке одноэлементной службы.
Шаг 1: - Реализуйте weblogic.cluster.singleton.SingletonService
интерфейс.
package org.teliet.singletontest;import weblogic.cluster.singleton.SingletonService; public class MySingletonServiceClass implements SingletonService{ @Override public void activate() { System.out.println("This is activate"); // for testing purpose I put here SOP
}
@Override public void deactivate() {
System.out.println("This is deactivate"); // for testing purpose I put here SOP }
}
Шаг 2: - Добавьте конфигурацию в weblogic-application.xml
откройте свой .ear → META-INF → weblogic-application.xml и добавьте ниже конфигурации
<weblogic-application>
...
<singleton-service>
<class-name> org.teliet.singletontest.MySingletonServiceClass
</class-name>
<name>singletonserviceclass</name>
</singleton-service>
...
</weblogic-application>
Примечание. Элементы ‹class-name› и ‹name› являются обязательными.
Шаг 3: - Теперь настройте поведение миграции SingletonService.
Откройте консоль административного портала Weblogic, которая выглядит следующим образом
Теперь нам нужно настроить кластер для Singleton Service. В Консоли администрирования WebLogic перейдите к своему кластеру, а затем на вкладку Миграция. Вам нужно будет каким-то образом настроить миграцию, я использовал Консенсус, чтобы избежать использования базы данных для этого примера, но ваша производственная модель может иметь совершенно другие потребности.
Теперь вам нужно перейти на вкладку «Singleton Services» кластера и создать новую Singleton Service.
Вы захотите использовать полное имя класса для синглтона:
Теперь повторно разверните приложение. Чтобы протестировать изменения в Singleton Services, перейдите к
Clusters → Cluster1 → SingletonServicesName → затем щелкните вкладку Control
Теперь предпочтительным сервером является MS1, когда MS1 не работает, он автоматически переносится на MS2. Вы также можете сделать то же самое, просто используя журналы. В журналах MS1-studout вы получите эти журналы «This is activate
», в MS2 ничего не будет отображаться. Если условие обратное, вы найдете журналы в MS2-studout.
Примеры использования службы Singleton
- Таймер задачи или планировщик заданий в кластере.
- Синглтон-сервис для обработки других некластеризованных сервисов.
- Единый источник свойств для кластерных приложений.
Это просто идея. Копайте глубже, найдите больше и дайте мне знать.
Если вам понравилась эта статья, не забудьте хлопать в ладоши.
Еще рассказы.
Канал Youtube: -
Https://www.youtube.com/channel/UCiTaHm1AYqMS4F4L9zyO7qA