Size: a a a

Scala User Group

2020 August 05

N

Nik in Scala User Group
Apache DOG™
def Listener(callback: String => Unit): Unit = {

     val connectionFactory  = new ActiveMQConnectionFactory(activeMqUrl)
     val connection = connectionFactory.createConnection
     connection.setClientID("gatling")
     connection.start

     println("Started")

     val qsession: javax.jms.Session = connection.createSession(false, ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE)
     val queue  = qsession.createQueue("dest")
     val consumer = qsession.createConsumer(queue)
     var count = 0
     var msg : String = ""

     val listener = new MessageListener {
       def onMessage(message: Message) {
         var msg1 = ""
         message match {
           case text: BytesMessage => {

             if (message.isInstanceOf[BytesMessage] && count < 1) {

               val byteMessage = message.asInstanceOf[BytesMessage]
               var byteData = new Array[Byte](byteMessage.getBodyLength.toInt)
               byteMessage.readBytes(byteData)
               byteMessage.reset()
               var stringMessage = new String(byteData)
//                println("Received message: " + stringMessage)
               count += 1
               println("Count: " + count)
               callback(stringMessage)
                 text.acknowledge()
                 msg1 = stringMessage
//                  println(msg)

             }
           }
           case _ => {
             throw new Exception("Unhandled Message Type: " + message.getClass.getSimpleName)
           }
             println("msg1 :" + msg1)
         }
       }
     }
     consumer.setMessageListener(listener)
   }
Спасибо!
А из вне как использовать, подскажешь?
Попытался распечатать - получил ошибку
Order.scala:31:33: not enough arguments for method Listener: (callback: String => Unit)Unit.
Unspecified value parameter callback.
 println(QueueListener.Listener())
источник

AD

Apache DOG™ in Scala User Group
ну тебе нужно коллбек пробросить куда-то
источник

AD

Apache DOG™ in Scala User Group
Listner(println)
источник

N

Nik in Scala User Group
Apache DOG™
Listner(println)
Работает, спасибо!
Т.е туда могу просто передать переменную строковую и потом ее распечатать?
Listener(str)
println(str)
источник

AD

Apache DOG™ in Scala User Group
нет, ты не можешь "вытащить" переменную
источник

AD

Apache DOG™ in Scala User Group
тебе нужно описать что ты с ней дальше будешь делать и дальше и передать в листнер
источник

N

Nik in Scala User Group
А можно какой-нибудь простой пример?
источник

AD

Apache DOG™ in Scala User Group
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Apache DOG™
def Listener(callback: String => Unit): Unit = {

     val connectionFactory  = new ActiveMQConnectionFactory(activeMqUrl)
     val connection = connectionFactory.createConnection
     connection.setClientID("gatling")
     connection.start

     println("Started")

     val qsession: javax.jms.Session = connection.createSession(false, ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE)
     val queue  = qsession.createQueue("dest")
     val consumer = qsession.createConsumer(queue)
     var count = 0
     var msg : String = ""

     val listener = new MessageListener {
       def onMessage(message: Message) {
         var msg1 = ""
         message match {
           case text: BytesMessage => {

             if (message.isInstanceOf[BytesMessage] && count < 1) {

               val byteMessage = message.asInstanceOf[BytesMessage]
               var byteData = new Array[Byte](byteMessage.getBodyLength.toInt)
               byteMessage.readBytes(byteData)
               byteMessage.reset()
               var stringMessage = new String(byteData)
//                println("Received message: " + stringMessage)
               count += 1
               println("Count: " + count)
               callback(stringMessage)
                 text.acknowledge()
                 msg1 = stringMessage
//                  println(msg)

             }
           }
           case _ => {
             throw new Exception("Unhandled Message Type: " + message.getClass.getSimpleName)
           }
             println("msg1 :" + msg1)
         }
       }
     }
     consumer.setMessageListener(listener)
   }
вот это истинно межнар решение
источник

Oℕ

Oleg ℕizhnik in Scala User Group
в конкурентный код во фреймворке на многопоточность заточенном втыкаем var без аннотаций
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nik
А можно какой-нибудь простой пример?
Никика, вам нужно определиться, зачем вам эта строчка нужна
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И в какой момент
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И изменить подход
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Так, чтобы делать нужные действия в момент приходящего события
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Можно использовать уже готовые абстракции для композиции, хоть даже Promise/Future
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Но не var
источник

N

Nik in Scala User Group
Да уже разобрался более менее
Сделал немного по-другому (через список) и вроде работает
Спасибо за помощь!
источник

Oℕ

Oleg ℕizhnik in Scala User Group
.....
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Никита, если вы будете использовать вары или несинхронизированные коллекции, в многопоточном режиме, в котором работает обычно гатлинг, на многоядерной машине вы получите некорректную семантику
источник

GP

Grigory Pomadchin in Scala User Group
Oleg ℕizhnik
в конкурентный код во фреймворке на многопоточность заточенном втыкаем var без аннотаций
какие хочешь аннотации?
источник