You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.8 KiB

  1. /*
  2. * Beispiel fr MOM / AMQP
  3. *
  4. * Message Producer, schickt Messages an Queue in ActiveMQ
  5. *
  6. * zuvor ActiveMQ starten, Zugriff auf Web-Oberflche http://localhost:8161/admin Login: admin ;)
  7. *
  8. * Beispiele, siehe z.B. http://activemq.apache.org/hello-world.html
  9. * oder http://activemq.apache.org/getting-started.html
  10. */
  11. package verteiltesysteme.mom;
  12. import java.io.BufferedReader;
  13. import java.io.InputStreamReader;
  14. import java.text.DateFormat;
  15. import java.text.SimpleDateFormat;
  16. import java.util.Date;
  17. import javax.jms.Connection;
  18. import javax.jms.DeliveryMode;
  19. import javax.jms.Destination;
  20. import javax.jms.MessageProducer;
  21. import javax.jms.Session;
  22. import javax.jms.TextMessage;
  23. import org.apache.activemq.ActiveMQConnectionFactory;
  24. public class Producer {
  25. static int jobNumber = 0;
  26. public static void main(String[] args) {
  27. try {
  28. BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
  29. String jobMessage;
  30. // ConnectionFactory erzeugen
  31. ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
  32. // Connection erzeugen
  33. Connection connection = connectionFactory.createConnection();
  34. connection.start();
  35. // Session erzeugen
  36. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  37. // Destination erzeugen (Queue oder Topic)
  38. Destination destination = session.createQueue("VerteilteSysteme.TimestampJobs");
  39. // MessageProducer f�r die Session zur Destination (hier eine Queue) erzeugen
  40. MessageProducer producer = session.createProducer(destination);
  41. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  42. System.out.println("Geben Sie eine Nachricht ein (leere Zeile zum Abbrechen): ");
  43. jobMessage = inFromUser.readLine();
  44. // Erzeugt eine neue Nachricht, im Beispiel k�nnte dies ein Job (Arbeitsauftrag
  45. // an die Consumer) sein inkl. Zeitstempel etc.
  46. while (!jobMessage.isEmpty()) {
  47. jobNumber++;
  48. DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
  49. String text = "Neuer Arbeitsauftrag (Job) (von Thread: " + Thread.currentThread().getName() + ", " +
  50. "Producer: " + producer.hashCode() + "), " +
  51. "Job-Zeit: " + df.format(new Date(System.currentTimeMillis())) + ", " +
  52. " Job-Nr: " + jobNumber + ", " +
  53. "Job-Nachricht: " + jobMessage;
  54. TextMessage message = session.createTextMessage(text);
  55. // Tell the producer to send the message
  56. System.out.println("Nachricht gesendet! HashCode: " + message.hashCode() + " Inhalt: \""
  57. + message.getText() + "\"");
  58. producer.send(message);
  59. System.out.println("\nGeben Sie eine Nachricht ein (leere Zeile zum Abbrechen): ");
  60. jobMessage = inFromUser.readLine();
  61. }
  62. // Clean up
  63. session.close();
  64. connection.close();
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. }
  68. }
  69. }