이 콘텐츠는 선택한 언어로 제공되지 않습니다.
2.3. Create a Consumer Client
Overview 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
This section describes how to create a consumer client of the notification broker. The consumer client subscribes to a particular topic and creates a callback service, which is capable of receiving messages directly from the broker.
Sample consumer client code 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
Example 2.2, “Consumer Client Code” shows the code for a sample consumer client that subscribes to messages published on the
MyTopic
topic.
Example 2.2. Consumer Client Code
Creating a consumer callback object 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
In order to receive notification messages from the notification broker, you must create a consumer callback object to receive the messages. The consumer callback object is in fact a Web service which is embedded in your client. The easiest way to create the consumer callback is to use the
org.apache.cxf.wsn.client.Consumer
class from the simplified client API, which enables you to define a callback as follows:
The first argument to the
Consumer
constructor is a reference to the consumer callback object, which is defined inline. The second argument specifies the URL of the consumer callback endpoint, which can receive messages from the notification broker.
Subscribing to a topic 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
To start receiving messages, you must subscribe the consumer to a topic in the notification broker. To create a subscription, invoke the following
subscribe
method on the NotificationBroker
proxy object:
Subscription subscribe(Referencable consumer, String topic)
Subscription subscribe(Referencable consumer, String topic)
The first argument is a reference to a
Consumer
object (which is capable of returning a WS-Addressing endpoint reference to the consumer callback through the Referencable.getEpr()
method). The second argument is the name of the topic you want to subscribe to.
The return value is a reference to a
Subscription
object, which you can use to manage the subscription (for example, pause, resume, or unsubscribe).
Threading in the consumer client 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
Because the consumer client has an embedded Web service (the consumer callback object), which automatically starts in a background thread, it is necessary to manage threading in this sample client. In particular, after creating the subscription, you need to put the main thread to sleep (by calling
Thread.sleep(60000)
), so that the thread context can switch to the background thread, where the callback Web service is running. This makes it possible for the consumer callback to receive some messages.
Steps to create a consumer client 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
Perform the following steps to create a consumer client:
- Use the
archetype:generate
goal to invoke theservicemix-cxf-code-first-osgi-bundle
archetype. Under thewsn
directory, invoke the Maven archetype as follows:Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteThe backslash characters at the end of each line are effective as line-continuation characters on UNIX and LINUX platforms. If you are entering the command on a Windows platform, however, you must enter the entire command on a single line.You will be prompted to confirm the project settings, with a message similar to this one:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Type Return to accept the settings and generate the project. When the command finishes, you should find a new Maven project in thewsn/wsn-consumer
directory. - Some of the generated project files are not needed for this tutorial. Under the
wsn/wsn-consumer
directory, delete the following files and directories:src/main/resources/META-INF/spring/beans.xml src/main/java/org/jboss/fuse/example/wsn/consumer/Person.java src/main/java/org/jboss/fuse/example/wsn/consumer/PersonImpl.java src/main/java/org/jboss/fuse/example/wsn/consumer/UnknownPersonFault.java src/main/java/org/jboss/fuse/example/wsn/consumer/types
src/main/resources/META-INF/spring/beans.xml src/main/java/org/jboss/fuse/example/wsn/consumer/Person.java src/main/java/org/jboss/fuse/example/wsn/consumer/PersonImpl.java src/main/java/org/jboss/fuse/example/wsn/consumer/UnknownPersonFault.java src/main/java/org/jboss/fuse/example/wsn/consumer/types
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Edit the
pom.xml
file in thewsn-consumer
directory, and add the following dependencies, as required by the consumer client:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Edit the
Client.java
file in thewsn-consumer/src/main/java/org/jboss/fuse/example/wsn/consumer/client/
directory, remove the existing content, and replace it with the code from Example 2.2, “Consumer Client Code”.
Test the consumer client 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
Test the consumer client as follows:
- If the JBoss A-MQ container is not already running (with the notification broker installed), start it up now:
./amq
./amq
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Run the publisher client at the command line. Open a new command prompt, and enter the following commands:
cd wsn/wsn-publisher mvn -Pclient
cd wsn/wsn-publisher mvn -Pclient
Copy to Clipboard Copied! Toggle word wrap Toggle overflow In the command window, you should see some output like the following:... INFO: Creating Service {http://cxf.apache.org/wsn/jaxws}NotificationBrokerService from WSDL: jar:file:/Users/fbolton/.m2/repository/org/apache/cxf/services/wsn/ cxf-services-wsn-api/2.6.0.redhat-60024/cxf-services-wsn-api-2.6.0.redhat-60024.jar !/org/apache/cxf/wsn/wsdl/wsn.wsdl
... INFO: Creating Service {http://cxf.apache.org/wsn/jaxws}NotificationBrokerService from WSDL: jar:file:/Users/fbolton/.m2/repository/org/apache/cxf/services/wsn/ cxf-services-wsn-api/2.6.0.redhat-60024/cxf-services-wsn-api-2.6.0.redhat-60024.jar !/org/apache/cxf/wsn/wsdl/wsn.wsdl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow You now have approximately two minutes before the publisher client times out. - Run the consumer client at the command line. Open a new command prompt and enter the following commands:
cd wsn/wsn-consumer mvn -Pclient
cd wsn/wsn-consumer mvn -Pclient
Copy to Clipboard Copied! Toggle word wrap Toggle overflow In the command window, you should see some output like the following:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - To inspect the state of the notification broker, you can connect to the JMX port of the ActiveMQ broker. Start up a JMX console by entering the following command at the command line:
jconsole
jconsole
Copy to Clipboard Copied! Toggle word wrap Toggle overflow In the JConsole: New Connection dialog, select Remote Process and enter the following URL in the accompanying text field:service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root
service:jmx:rmi:///jndi/rmi://localhost:1099/karaf-root
Copy to Clipboard Copied! Toggle word wrap Toggle overflow In the Username and Password fields, enter one of the user credentials you created at the start of this tutorial. When you are connected to the JMX port, you can inspect the state of the broker by clicking on the MBeans tab and drilling down the object tree in the JConsole.