Продолжение поста IBM MQ automatic client reconnection to multi-instance queue manager.
Продолжение поста IBM MQ automatic client reconnection to multi-instance queue manager.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
Connection parameters: TcsMQConnectionParams connectionParams = new TcsMQConnectionParams { Host = "mq-test01", Port = 1414, Channel = "CHN.T01", ManagerName = "QM1", TopicString = "/Cards/Events" }; Connection to topic - simple example: public sealed class WebSphereListenerService { private IConnection _connection; private ISession _session; private IDestination _destination; private IMessageConsumer _consumer; private readonly TcsMQConnectionParams _connectionParameters; private IConnectionFactory _connectionFactory; public WebSphereListenerService(TcsMQConnectionParams connectionParameters) { _connectionParameters = connectionParameters; } public void Start() { // Create the connection factories factory var factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ); // Use the connection factories factory to create a connection factory _connectionFactory = factoryFactory.CreateConnectionFactory(); // Set the properties _connectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, _connectionParameters.Host); _connectionFactory.SetIntProperty(XMSC.WMQ_PORT, _connectionParameters.Port); _connectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, _connectionParameters.Channel); _connectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, _connectionParameters.ManagerName); _connectionFactory.SetStringProperty(XMSC.CLIENT_ID, $"ClientName_{Environment.MachineName}.{"TestApp"}"); CreateNewConnection(); } private void CreateNewConnection() { _connection = _connectionFactory.CreateConnection(); _session = _connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge); _destination = _session.CreateTopic(_connectionParameters.TopicString); var subName = "subscriptionName"; _consumer = _session.CreateDurableSubscriber(_destination, subName); //_session.Unsubscribe(subName); _consumer.MessageListener = Receive; _connection.Start(); } private void Receive(IMessage msg) { // Handler } } |
Хозяйке на заметку: http://betteratoracle.com/posts/34-avoiding-ora-04068-existing-state-of-packages-has-been-discarded Даже если пакет зависит от таблицы и таблица поменялась и пакет инвалидировался, то application получит ошибку “java.sql.SQLException: ORA-04068: existing state of packages has been discarded” только в том случае, если у пакета есть состояние, т.е. если…
В среде WebSphere MQ, где используется multi-instance менеджер очередей, необходимо обеспечить переподключение приложений-клиентов к другому инстансу менеджера в случае сбоев. Начиная с версии WebSphere MQ V7.0.1.3, для поддержки автоматического переподключения клиентов, в фабрике соединений (Connection Factory, CF) добавлено свойство CLIENTRECONNECTOPTIONS. Этот параметр…
На ресурсе IBM developerWorks есть отличная серия статей – “Java run-time monitoring” (Мониторинг работы Java-приложений), автором которой является Николас Уайтхед (Nicholas Whitehead). Серия состоит из трех частей, в которых подробно раскрыты вопросы, связанные с мониторингом производительности Java-приложений и среды окружения.
В этой заметке собраны рекомендации и “best practices” по разработке web-приложений, в виде списка ссылок. Этакий “check-list” для разработчиков. Собранные рекомендации относятся к любому серверу приложений.